我現在用RODataSnap做了一個服務器
用TADOQuery和TDataSetProvider可接SQL陳述句的provider:CommonUse
我在客戶端上面呼叫CommonUse
通過SQL陳述句取數
平常使用沒什么問題
為了測驗性能,
var
tmpcnt, i: Integer;
tmstart, tmfinish: TDateTime;
begin
if Button1.Enabled then
begin
Button1Click(Sender);
end;
tmpcnt := StrToInt(EditPort.Text);
try
for i := 1 to tmpcnt do
begin
Application.ProcessMessages;
if 1 > RandomRange(0, 9) then
begin
cds_List.Close;
tmstart := Now;
MemoAddText(IntToStr(i) + ':開始取數||開始時間:' + FormatDateTime('hh:mm:ss', tmstart));
cds_List.Open;
tmfinish := Now;
MemoAddText(IntToStr(i) + ':完成取數||結束時間:'
+ FormatDateTime('hh:mm:ss', tmfinish) + '||耗時:'
+ FormatDateTime('hh:mm:ss', tmfinish - tmstart));
end;
end;
except
on e:exception do
begin
application.MessageBox(pchar(e.Message), 'Error', 0);
end;
end;
end;
我在EditPort中輸入20000
然后開始回圈
在回圈程序中
在服務器上就會出現多次List index out of bounds的提示
如圖、

uj5u.com熱心網友回復:
這類問題應該仔細檢查下就能找到問題,或除錯程式。uj5u.com熱心網友回復:
通過除錯,發現報出例外的代碼位置是代碼如下
function TRODataSnapBaseAppServer.AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: AnsiString): binary;
var lProvider:TCustomProvider;
lOwnerData,lParams:OleVariant;
begin
{$IFDEF DEBUG_REMOBJECTS_DATASNAP}
DebugServer.EnterMethodEx(self,'IAppServer.AS_GetRecords(ProviderName=%s,Count=%d,Options=%d,CommandText=%s)',[string(ProviderName),Count,Options,CommandText]); try
try
{$ENDIF DEBUG_REMOBJECTS_DATASNAP}
lProvider := GetProviderByName(ProviderName);
//result := BinaryFromVariant(lProvider.GetRecords(Count, RecsOut, Options));
lOwnerData := OwnerData;
lParams := VariantFromBinary(Params);
result := BinaryFromVariant(lProvider.GetRecords(Count, RecsOut, Options, CommandText, lParams, lOwnerData));
FreeAndNil(Params);
Params := BinaryFromVariant(lParams);
OwnerData := VarToAnsiStr(lOwnerData);
{$IFDEF DEBUG_REMOBJECTS_DATASNAP}
except DebugServer.WriteException(); raise; end;
finally DebugServer.ExitMethodEx(self,'IAppServer.AS_GetRecords(RecsOut=%d)',[RecsOut]); end;
{$ENDIF DEBUG_REMOBJECTS_DATASNAP}
end;
就是
result := BinaryFromVariant(lProvider.GetRecords(Count, RecsOut, Options, CommandText, lParams, lOwnerData));
這一行代碼
我試過加上例外保護
就是
try
except
end;
但是這個例外卻在外面報
估計是我沒找對地方
有沒有哪位大人知道怎么解決這個問題
uj5u.com熱心網友回復:
調戲了的,但還是沒找對地方
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121105.html
標籤:數據庫相關
上一篇:delphi 使用資源檔案問題
下一篇:Delphi 求助
