最近接手一個專案 代碼使用環境是本地 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;
uj5u.com熱心網友回復:
1 首先加個try 看能不能拋出錯誤2 不用table, 試試query
uj5u.com熱心網友回復:
這種業務一般呼叫服務器上的服務相對要安全一些。用ADO直連接云資料庫還是受限制比較多,如果到5G時代應該就好了。
uj5u.com熱心網友回復:
直接連外網資料庫,存在訪問慢和容易掉線問題,你備份也沒有開啟事務,特別是寫入,由于互動次數多,速度非常慢。如果中間一量斷線,就只更新了其中的一些資料。uj5u.com熱心網友回復:
外網一定不要直連,一個是不安全,還有就是速度太慢。如果程式代碼多不想改老代碼,可以下載satrda中間件,修改連接串對外網更新可以加速幾十上百倍。
參考這個連接改
https://blog.csdn.net/pcwe2002/article/details/52527782
uj5u.com熱心網友回復:
把資料庫暴露在外網就是在找死。多用戶環境下直接連接資料庫也不可取。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/11130.html
標籤:數據庫相關
上一篇:WIN10+DELPHI10.3+FastReport6.3 使用fastreort里面demo案例時報錯 所有的都一樣 報錯檔案是frxXML.pas
