急:在ClientDataSet中的CommandText无法添加日期类型的数据(100分)

  • 主题发起人 主题发起人 whatisgod
  • 开始时间 开始时间
W

whatisgod

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是MSACCESS的,要添加的数据包括年/月/日/时/分/秒,在数据库的SQL视图中直接添加没问题,但是在Delphi中运行,提示"参数类型不正确"和"参数冲突"等提示,请各位同行们帮帮忙.我用showmessage显示该SQL语句,与数据库的SQL视图中的一模一样.
 
这样试试看!
var
strNow: String;
begin
strNow := '2006-10-19 08:00:00';
with ClientDataSet1do
begin
CommandText := 'INSERT INTO 表名(时间) VALUES(:时间)';
Params.ParamByName('时间').AsDateTime := StrToDateTime(strNow);
end;
end;
 
谢谢Johnny_du的回复,按您的方法尝试后,发现插入的数据还是只有日期,没有时间,我在Params中已经设置为DataTime类型了.
还有一事不明.
我用ClientDataSet+TTable,在一台客户端更改了数据后,在另一台客户端无法马上的到新的数据,请问不用SQL的方法如何能实现重新获得服务器的数据?
 
把该字段改成字符串型。。。Format成日期格式存储就行了。。。这样比较少出问题。。。加数据的时候强制检查一下就行了。
 
非常感谢xinxinhg的回复.
尚有一事请教:如果我将DateTime字段类型改成字符串,那么还能不能进行日期的判断呢?因为我要判断当前日期是否在有效的日期之间的.
 
设置
ADOQuery.ParamCheck = false
然后执行
insert into tab values(#2006-1-1 12:00:00#)
 
To Johnny_du:
在你的代码的基础上,我改为Params.ParamByName('时间').AsDateTime := now();
但是还是只有日期没有时间,不知何故.
感谢 轻舞肥羊 的回复.
我在程序中大量运用了Params,现在不好改,能不能有第二种解决方案呢?
我还是希望能用Params插入时间,不过又不想转换成字符串类型,因为改数据库的工作量也比较大,所以,请大家帮帮忙,(也请原谅我的任性).
 
var
dt :do
uble;
begin
dt := StrToDateTime(strNow);
Params.ParamByName('时间').value := dt;
end;
 
改字段改成字符串存储以后你做比较的时候只要把他StrToDateTime(要保证你存储的是日期格式,否则会异常)进行比较就行了。。。应该不麻烦[:)]。。。如果你本来就是Params.ParamByName('时间).AsDateTime方式写的那就根本不用改。。。直接可以用的。。。他会自动转换成日期型了
 
var
strNow: String;
begin
strNow := '2006-10-19 08:00:00';
with ClientDataSet1do
begin
CommandText := 'INSERT INTO 表名(时间) VALUES(:时间)';
Params.ParamByName('时间').Value:= strNow;
//直接让它自己去识别什么类型
end;
end;
 
如果使用datetimepicker来选择时间,可以在窗口或控件初始化时设备 datetimepicker1.datetime :=now;
然后
Params.ParamByName('时间').AsDateTime := datetimepicker1.datetime;
它会把当前的日期时间存入数据库。
 
问题不一定出在你程序怎么写上。。。可能是ClientDataSet的Bug。。。我遇到过的是对汉字的长度识别不了。。。录入的数据会被截断。。。后来修改了源码才解决。。。不用在这种正常操作(要确定操作是正确的,经过反复实践再下结论)而得不到正确结果的问题上浪费太久的时间。。。换种方法实现了就可以了。。。[:)]
 
谢谢大家的帮忙,我会努力的.
 
CommandText := 'INSERT INTO 表名(时间) VALUES(:时间)';
Params.ParamByName('时间').Value:= strNow;
////
如何执行它啊,我是菜鸟,谢谢!
 
clientdataset.execute
 
后退
顶部