请问怎样在delphi自带的PARADOX数据库中插入日期型数据(50分送上)(50分)

  • 主题发起人 主题发起人 Jack_long
  • 开始时间 开始时间
J

Jack_long

Unregistered / Unconfirmed
GUEST, unregistred user!
我的代码如下
hStr:= 'insert into ic01(CAE301,AAB001,AAC001,CAC001,AAC003,AAE002,AAC040,'
+ 'AIC020,AIC021,AIC024,CAC009,CAC010,CAC011,CAC012,CAC013,CAC014,'
+ 'AAA042,AAA043,AAA041,CAC015,CAC016,CAE007,CAE008,CAE003,CAE004,'
+ 'CAE005,CAE006) values ('''
+ pCAE301 + ''','''
+ pAAB001 + ''','''
+ pAAC001 + ''','''
+ pCAC001 + ''','''
+ pAAC003 + ''','''
+ pAAE002 + ''','''
+ pAAC040 + ''','''
+ pAIC020 + ''','''
+ pAIC021 + ''','''
+ pAIC024 + ''','''
+ pCAC009 + ''','''
+ pCAC010 + ''','''
+ pCAC011 + ''','''
+ pCAC012 + ''','''
+ pCAC013 + ''','''
+ pCAC014 + ''','''
+ pAAA042 + ''','''
+ pAAA043 + ''','''
+ pAAA041 + ''','''
+ pCAC015 + ''','''
+ pCAC016 + ''','''
+ pCAE007 + ''','''//第488行
+ pCAE008 + ''','''//日期型
+ pCAE003 + ''','''//日期型 第490行
+ pCAE004 + ''','''
+ pCAE005 + ''','''//日期型 第492行
+ pCAE006 + ''')';
queryTmp.Close;
queryTmp.SQL.Clear;
queryTmp.SQL.Text :=hStr;
queryTmp.ExecSQL;

用这种写法报的错误为
[Error] MainData.pas(488): Incompatible types: 'String' and 'TDate'
[Error] MainData.pas(490): Incompatible types: 'String' and 'Extended'
[Error] MainData.pas(492): Incompatible types: 'String' and 'Extended'
 
有两种解决办法:
1、解决你的拼凑SQL的问题,如488行的pCAE007改为DateToStr(pCAE007),但SQL执行时可能还会错
2、用DELPHI编程中部件方法
queryTmp.Sql.Clear;
queryTmp.Sql.Add('select * from ic01');
queryTmp.RequestLive := True;
queryTmp.Open;
queryTmp.Insert;
queryTmp.FieldByName('CAE301').AsString := pCAE301;
...
queryTmp.FiledByName('CAE007).AsDateTime := pCAE007;
...
queryTmp.Post;

其实拼凑SQL虽然是比较灵活的做法,但也是比较费力不讨好的,在满足程序要求的情况下,尽量用部件方法,会省力很多。
 
你可以将那几个日期型数据的字段写为date1=:a,date2=:b,...这种参数,
然后将日期值以参数的格式传入你拼的SQL,这样就不会出问题。

另外在Oracle中有to_date()承数可以将字符串转换为日期,
其格式为to_date(字符串格式的日期值,日期的格式),不知在Pradox中有没有这样的函数
格式怎样
 
多人接受答案了。
 
后退
顶部