我现在用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的提示
如图、
用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的提示
如图、
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;
但是这个异常却在外面报
估计是我没找对地方
有没有哪位大人知道怎么解决这个问题