ADO执行INSERT云端数据库丢失数据
最近接手一个项目 代码使用环境是本地 MSSQL2000 服务器 MSSQL2008
作用于发生交易后转存记录到服务器SQL2008上
局域网环境下使用没有任何问题。
但是最近迁移服务器到了阿里云服务器 经常性出现丢失记录行的情况
代码在局域网环境下执行了多年无任何异常和数据缺失问题。
(实际使用环境中可能有互联网接入质量差的问题。)
tmpTableName := SystemSetup.DataATableName;
//插入远程服务器表tmpTableName
tmpSQLStr := 'insert into ' + tmpTableName + '(did, dinsetcode, dno, ddate, dtime, dnum)';
DM.ADODealComm.CommandText := tmpSQLStr;
DM.ADODealComm.Prepared := True;
{$IFNDEF BDE}
if SystemSetup.BakData then
begin
tmpSQLStr := 'insert into hs_000ahistory(did, dbarcode, dno, ddate, dtime, dnum)';
TADOQuery(DM.TableAHistory).SQL.Text := tmpSQLStr;
TADOQUERY(DM.TableAHistory).Prepared := True;
end;
{$ENDIF}
DM.TableA.First;
ARecordCount := 0;
while (not DM.TableA.Eof) and (not tmpError) do
begin
//写入服务器。
if ALimit then
begin
ARecordCount := ARecordCount + 1;
if ARecordCount > 100 then
Break;
end;
with DM.ADODealComm.Parameters, DM.TableA do
begin
ParamByName('did').Value := FieldByName('did').AsString;
ParamByName('dbarcode').Value := FieldByName('dbarcode').AsString;
ParamByName('dNo').Value := FieldByName('dNo').AsString;
ParamByName('dDate').Value := FieldByName('DDate').AsDateTime;
ParamByName('dtime').Value := FieldByName('dtime').AsString;
ParamByName('dnum').Value := FieldByName('dnum').AsVariant;
end;
DM.ADODealComm.Execute;
//数据有确实现象。 比如这笔交易10行记录
//实际远程服务器接这笔交易只有7行记录 或者压根没有记录
//尝试过TADOQuery(dm.ADODealComm).RowsAffected <> 1写入日志
//记录发现该笔交易10条记录 日志写入10次 相当于10条记录均未写入数据。
{$IFNDEF BDE}
if SystemSetup.BakData then
begin
with TADOQuery(DM.TableAHistory).Parameters, DM.TableA do
begin
ParamByName('did').Value := FieldByName('did').AsString;
ParamByName('dbarcode').Value := FieldByName('dbarcode').AsString;
ParamByName('dNo').Value := FieldByName('dNo').AsString;
ParamByName('dDate').Value := FieldByName('DDate').AsDateTime;
ParamByName('dtime').Value := FieldByName('dtime').AsString;
ParamByName('dnum').Value := FieldByName('dnum').AsVariant;
end; // with
TADOQuery(DM.TableAHistory).ExecSQL;
//本地备份的数据无任何问题。无数据丢失。
end;
{$ENDIF}
DM.TableA.Delete;
end;