使用ADO中的事务往SQLSERVER中插入数据时,为什么只有最后一行提交了(再线等待)

litongling 2003-11-14 08:40:59
但是去除了事务直接写却可以提交全部的数据。
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jpyc 2003-11-16
  • 打赏
  • 举报
回复
好象ADO不能处理多条的
litongling 2003-11-14
  • 打赏
  • 举报
回复
如果把事务的开始放到WHILE中,达不到预期的要求,我想是把所有的临时表中的数据都添加到SQLSERVER中,有错误全部回滚的。如果添加到WHILE 中那么只对应的是一条纪录而已。
再一个事务中只能有一个EXECSQL吗,我记得以前使用BDE时,可以执行多个EXECSQL的。
这次我是第一次使用ADO。代码也是以前BDE中的。在BDE中应该是可以的呀
xfgncit98 2003-11-14
  • 打赏
  • 举报
回复
up
miszyf 2003-11-14
  • 打赏
  • 举报
回复
楼上说得好象有道理
XXSingle 2003-11-14
  • 打赏
  • 举报
回复
楼主把事务提交放到了循环语局的外边,这个事务就不怎么起作用了,
因每一行都执行了一次execsql,到了最后一条才退出循环,然后
CommitTrans 提交事务,很明显这个事件只对最后一个execsql起作用;
估计这就是你问了为什么的原因,把你的事务处理放到while的里边试试吧
litongling 2003-11-14
  • 打赏
  • 举报
回复
begin
if (clientdataset1.State = dsedit) then
clientdataset1.Post ;
try
datamodule1.adoconnection1.BeginTrans ;
clientdataset1.First ;
while not clientdataset1.Eof do {把在CLIENTDATASE1中的所有数据都添加到RK的表中。}
begin
with datamodule1.adoQuery1 do
begin
close;
sql.Clear ;
sql.add('insert jihuabiao(xuhao,bianhao,tuhao,mingcheng,shuliang,jindu,moxingchang,zhuzaochang,leixing,linghao,jihuabeizhu)');
sql.add('values(:xuhao,:bianhao,:tuhao,:mingcheng,:shuliang,:jindu,:moxingchang,:zhuzaochang,:leixing,:linghao,:jihuabeizhu)');
Parameters.ParamByName('xuhao').Value :=jhxuhao;
Parameters.parambyname('bianhao').Value :=edit1.text;
Parameters.parambyname('tuhao').Value :=clientdataset1.fieldbyname('tuhao').AsString ;
Parameters.parambyname('mingcheng').Value :=clientdataset1.fieldbyname('mingcheng').AsString ;
Parameters.parambyname('shuliang').Value :=clientdataset1.fieldbyname('shuliang').Asfloat;
Parameters.parambyname('jindu').Value :=clientdataset1.fieldbyname('jindu').Asdatetime ;
Parameters.parambyname('moxingchang').Value :=clientdataset1.fieldbyname('moxingchang').AsString ;
Parameters.parambyname('zhuzaochang').Value :=clientdataset1.fieldbyname('zhuzaochang').AsString ;
Parameters.parambyname('leixing').Value :=clientdataset1.fieldbyname('leixing').AsString ;
Parameters.parambyname('linghao').Value :=clientdataset1.fieldbyname('linghao').AsString ;
Parameters.parambyname('jihuabeizhu').Value :=clientdataset1.fieldbyname('beizhu').AsString ;

execsql;
end;
clientdataset1.Next ;
end;
datamodule1.ADOConnection1.CommitTrans ;
clientdataset1.enablecontrols;
except
if datamodule1.ADOConnection1.InTransaction then
datamodule1.adoconnection1.RollbackTrans ;
showmessage('错误,请检查输入是否正确');
clientdataset1.enablecontrols;
end;
end;
txlicenhe 2003-11-14
  • 打赏
  • 举报
回复
你的代码?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧