先代码:
with AdoQuery do
try
connection := xxx;
sql.text := 'select * from a where 1=2';
preperd;
open;
append;
fieldbyname('sd').asstring := 'qeqe';
...
...
post;
except
保存错误消息
end;
表a中的记录可能有几万条,并在不断增加。
执行频率每秒可能有5条记录或者一条都没。
现在的问题是,有时候数据会保存不成功。我采用的是MSDE2000 sp3版本。
关键是exept中没捕获到任何异常消息。程序会一直执行,到最后才发现MSDE中会时不时少几条记录,并且是无规律的。 有没有那位遇到过此类问题,MSDE有问题,还是Ado出现了问题。
我用的是delphi6 sp2.欢迎大家发表下意见。谢谢
with AdoQuery do
try
connection := xxx;
sql.text := 'select * from a where 1=2';
preperd;
open;
append;
fieldbyname('sd').asstring := 'qeqe';
...
...
post;
except
保存错误消息
end;
表a中的记录可能有几万条,并在不断增加。
执行频率每秒可能有5条记录或者一条都没。
现在的问题是,有时候数据会保存不成功。我采用的是MSDE2000 sp3版本。
关键是exept中没捕获到任何异常消息。程序会一直执行,到最后才发现MSDE中会时不时少几条记录,并且是无规律的。 有没有那位遇到过此类问题,MSDE有问题,还是Ado出现了问题。
我用的是delphi6 sp2.欢迎大家发表下意见。谢谢
为什么要用ADOQuery来进行Append呢?
用ADOQuery是试试直接在SQL语句里写插入数据代码,大不了多用几个变量,一般插入数据还是很可靠的,没有出现楼主说的情况
外加事务
为了防止出现数据重复而没有保存,表中没设置主键等任何东西。关键是在执行这个保存操作的前后我还有其它操作都是成功了的。在同一function中.
[/Quote]我就是怕出现ID重复而丢失数据。所以没设置任何主键之类的,纯字段累积的一经表而已。无任何约束。
但我看了TDataSet的Insert和Append,基本都是一样的,仅仅是保存位置上不同。
怎么做都没解决掉,有时候更怪,同时更新两个字段,但却只有一个字段被更新了,而用来标示的字段却未更新。
改在服务端用存储过程且加上事务控制也发生同样的事情,反正这个问题成了顽疾了,怎么都搞不定。前后有公司几代程序员研究过这个问题,但都没搞定。最早是用两层写的也没发生过数据丢失的现象。
现在用oracle做的,也没再发生过这样的事情,到现在也没弄懂是哪里出的问题……
你那个问题更严重哈,连更新都不正确。但是你用两层没出现该类问题,说明不是sql问题了
每次生成insert sql语句提交
或每n次生成n行的insert sql语句提交
会不会好了呢?
再不行,不用数据集的post,改用insert语句.