<font color=#FF0000>为什么添加记录总是出错??</font>(100分)

  • 主题发起人 主题发起人 rex
  • 开始时间 开始时间
R

rex

Unregistered / Unconfirmed
GUEST, unregistred user!

使用Adoquery在Sql7.0中添加记录。

ddxxquery.SQL.Add('insert into Tab_newDDXX(BH,GH,SJ) values (:BH,:GH,:SJ)');
ddxxquery.Parameters.Items[0].Value:=edit1.text;
ddxxquery.Parameters.Items[1].Value:='111';
ddxxquery.Parameters.items[2].Value:=now;
ddxxquery.execsql;

运行时总是报错,报错内容是:[Microsoft] [ODBC SQL Server Driver] 没有执行可选特性
然后我把 改了下程序,却可以正确添加记录了
ddxxquery.SQL.Add('insert into Tab_newDDXX(BH,GH) values (:BH,:GH)');
ddxxquery.Parameters.Items[0].Value:=edit1.text;
ddxxquery.Parameters.Items[1].Value:='111';
ddxxquery.execsql;

在Sql的Tab_newDDXX表中,字段SJ的类型是Datetime

那位大虾能解决呢???
谢了


 
把时间转成字符串格式试一下
 
pascal里datetime实际上是double,跟数据库定义的不一致
 
ddxxquery.Paramsbyname('sj').asdate:=now;
 
ddxxquery.Paramsbyname('sj').asstring := '12-31-2000'也是可以的。
 
我也有各类似的问题:
我用如下语句插入记录:
query1.close;
query1.sql.clear;
query1.SQL.Add('insert into tablename values(........)');
query1.execsql;
query1.post;
总报:dataset not in edit or insert mode!
我在post前面加了句:
query1.edit;
又报:不能在关闭的数据集中执行该操作!
小弟不知道怎么解决该问题,还请诸位大虾指教!


 
johnyh : 语法错误。
query1.execsql后POST就不用加了。EDIT也不对。
正确的语法:
try
....
query...
query.execsql
database.commit
except
database.rollback;
end;
query的POST、EDIT要在CACHEUPDATE=TRUE时再用。
 
ddxxquery.Paramsbyname('sj').asdate:=now;

ddxxquery.Paramsbyname('sj').asdatetime:=now;

ddxxquery.Paramsbyname('sj').asfloat:=strtoint(datetostr(now))

 
ddxxquery.Parameters.items[2].asdatetime:=now;
 
用AsValue于日期字段有问题,改为AsDateTime就可以了。
ddxxquery.Parameters.items[2].AsDateTime:=now;
 
大家注意。我用的是Adoquery 好象ddxxquery.Parameters.items[2]. 没有asdate,asstring
asdatetime 的属性啊 !!!!!
 
..........................
 
ddxxquery.Parameters.items[2].Value:=DateToStr(now);
 
我用如下语句写入很正常,你试试看:

ddxxquery.Parameters.ParamByName('sj').value:=now;
 
每个数据库都有自己的Tdatetime的默认格式,而我们将Delphi的日期格式传给数据库
服务器时,可能与数据库的格式有冲突,实际上,大多数情况下都有冲突,所以要对
日期格式进行格式化,假设数据库的日期格式为:2000/09/17 18:45:25 则应赋值:
ddxxquery.Parameters.ParamByName('sj').value:=
strtodatetime(formatdatetime('yyyy/mm/dd hh:mm:ss',now));

 
ddxxquery.SQL.Add('insert into Tab_newDDXX(BH,GH,SJ) values (:BH,:GH,:SJ)');
ddxxquery.Parameters.Items[0].Value:=edit1.text;
ddxxquery.Parameters.Items[1].Value:='111';
ddxxquery.Parameters.items[2].Value:=Datetostr(now);
ddxxquery.execsql;

刚试过,行的。
 
G:seesee and fstao
 
可这样试一试
ddxxquery.Parameters.items[2].asstring:=datetimetostr(now);

或者干脆在数据库里设置该表的该字段的缺省值为now(),这样该字段将自动
添加,你就不要管了。
 
多人接受答案了。
 
后退
顶部