開發環境為WIN7 64+ SQL SERVER2008 R2+ DELPHI XE8;
系統架構采用Datasnap,資料訪問引擎為dbExpress。資料庫連接和QUERY,DataSetProvider都放在一個DataModule中,程式界面的FORM上放置ClientDataSet,,使用RemoteServer連接DataModule中的DataSetProvider。
現在出現的情況是一個dbExpress TSQLConnetion空間掛接的TSQLQuery控制元件數量一多某個ClientDataSet執行ApplyUpdate更新資料時就提示“由于容量超出限制,不能創建新事務”。同一組ClientDataSet ,DataSetProvider, SQLQuery單獨使用一個SQLConnect就能正常用ApplyUpdate更新資料。
現在不知道問題出在哪里,總不能一組資料單獨使用一個SQLConnect吧。
uj5u.com熱心網友回復:
跟蹤了代碼,在這里出錯:function TCustomProvider.DoApplyUpdates(const Delta: OleVariant; MaxErrors: Integer;
out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant;
begin
SetActiveUpdateException(nil);
try
try
if Assigned(FOnValidate) then
FOnValidate(Delta);
DoBeforeApplyUpdates(OwnerData);
Self.OwnerData := OwnerData;
try
Result := InternalApplyUpdates(Delta, MaxErrors, ErrorCount);
finally
OwnerData := Self.OwnerData;
Self.OwnerData := unassigned;
end;
except
on E: Exception do
begin
SetActiveUpdateException(E);
raise;
end;
end;
finally
try
DoAfterApplyUpdates(OwnerData);
finally
SetActiveUpdateException(nil);
end;
end;
end;
uj5u.com熱心網友回復:
運行到:Result := InternalApplyUpdates(Delta, MaxErrors, ErrorCount);
就彈出例外。
uj5u.com熱心網友回復:
前幾天跟蹤源代碼,發現這個事務容量問題,是一些讀取字典基本資訊的代碼引起的。我在程式里做了一個讀取字典表基礎資訊的函式,向顯示資料的FORM回傳ClientDataSet的資料包。代碼是這樣的:
qryDictionary.Close;
qryDictionary.ParamByName('Type').AsString := InfoType;
qryDictionary.Open;
Result := self.dspDictionary.Data; }
qryDictionary.Close;
dspDictionary就是一個DataSetprovider控制元件。這段代碼反復呼叫十遍左右的時候所用的TSQLConnect要開始事務時就提示事務容量不足了,呼叫兩三次時開始事務是沒有問題的。后來不用dbExpress引擎,改用ADO引擎就沒有出現這個問題。所以現在初步判定是dbExpress資料引擎的問題,但是應該從哪方面入手解決呢?
PS:我的問題發了這么多天也沒有任何人回答,看來用DELPHI的人現在真的很少了。
uj5u.com熱心網友回復:
dbxpress本來架構很不錯,只是問題多多!尤其是在delphi7之后,總感覺不穩定!uj5u.com熱心網友回復:
ApplyUpdate本身條件限制很多,不好用。自己寫一個類似功能的方法,取而代之。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72896.html
標籤:數據庫相關
下一篇:視頻播放器開發外包
