读书人

小弟我的事务管理机制为何只能处理21条

发布时间: 2012-10-12 10:17:04 作者: rapoo

我的事务管理机制为何只能处理21条以下的insert语句?超过21条就不行了?
相关的代码是这样:
begin
DM.ADOQry2.SQL.Clear;
for Counter:=1 to PointCounter do
begin
DM.ADOQry2.SQL.Add(INSERT 语句,大约循环30次);
end;
DM.ADOCnctnSQLServer.Connected:=True; //事务处理机制
if not DM.ADOCnctnSQLServer.InTransaction then
DM.ADOCnctnSQLServer.BeginTrans;
try //try
DM.ADOQry2.ExecSQL;
DM.ADOCnctnSQLServer.CommitTrans;
except //except
DM.ADOCnctnSQLServer.RollbackTrans;
Application.MessageBox('存储错误,数据未保存','系统提示',MB_OK+MB_ICONINFORMATION);
end; //end

很简单的insert,只是输入一些数字,但是:
如果insert21条记录,第21条记录的数字就不正常了,总是变成1.74719057415372E-304 之类的
如果insert22条记录,就根本无法保存了。


[解决办法]
事务处理似乎没有这种限制

建议你把 DM.ADOQry2.SQL.Text输出到memo里看下
[解决办法]
楼主,先把事务全部去掉,检查是否是代码或者数据问题。
若排除这个问题,按按楼上的意见打印insert语句。

当然也有可能是嵌套事务太多,机器受不了。
还有个疑问Counter的变化量在哪里操作?
[解决办法]

探讨
相关的代码是这样:
begin
DM.ADOQry2.SQL.Clear;
for Counter:=1 to PointCounter do
begin
DM.ADOQry2.SQL.Add(INSERT 语句,大约循环30次);
end;
DM.ADOCnctnSQLServer.Connected:……

[解决办法]
sql server的话sql语句不能超过8000个字符,
循环的时候直接单句执行就可以了
[解决办法]
32k之内是没问题的,sql2005
[解决办法]
DM.ADOQry2.SQL.Clear;
for Counter:=1 to PointCounter do

一下位置

读书人网 >.NET

热点推荐