修改了Delphi自带的三层无状态实例源码。
客户端:
procedure TForm1.ClientDataSet1BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
var
LastValue: OleVariant;
begin
if ClientDataSet1.Active then
begin
CDSClone.CloneCursor(ClientDataSet1, True);
CDSClone.Last;
LastValue := CDSClone.RecNo; {返回客户端当前所在的行号}
CDSClone.Close;
end else
LastValue := NULL;
OwnerData := VarArrayOf([Memo1.Lines.Text, LastValue]);
end;
服务器:
try
ADOQuery1.Close;
ADOQuery1.SQL.Text := OwnerData[0];
if not VarIsNull(OwnerData[1]) and not VarIsEmpty(OwnerData[1]) then
begin
ADOQuery1.Open;
ADOQuery1.MoveBy(OwnerData[1] - 1); {移动到客户端返回的位置}
ADOQuery1.Next;
end;
finally
OwnerData := NULL;
end;