📄 flargedatasetclient2main.pas
字号:
unit fLargeDataSetClient2Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBClient, MConnect, SConnect, Grids, DBGrids, StdCtrls, ExtCtrls,
DBCtrls;
type
TForm3 = class(TForm)
DBNavigator1: TDBNavigator;
Panel1: TPanel;
edtSearchField: TEdit;
edtRecNo: TEdit;
edtTime: TEdit;
btnLocate: TButton;
btnMore: TButton;
DBGrid1: TDBGrid;
ClientDataSet1: TClientDataSet;
SocketConnection1: TSocketConnection;
DataSource1: TDataSource;
cdsGeneral: TClientDataSet;
cdsTemp: TClientDataSet;
DataSource2: TDataSource;
DBNavigator2: TDBNavigator;
DBGrid2: TDBGrid;
ClientDataSet2: TClientDataSet;
btn2More: TButton;
procedure btnLocateClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure ClientDataSet1BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
procedure btnMoreClick(Sender: TObject);
procedure ClientDataSet2BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
procedure btn2MoreClick(Sender: TObject);
private
{ Private declarations }
vOwnerData : OleVariant;
bTrueEOF : Boolean;
bTrueEOF2 : Boolean;
v2OwnerData : OleVariant;
function GetKeyFieldValue(Sender : TObject) : OleVariant;
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.DFM}
procedure TForm3.btnLocateClick(Sender: TObject);
var
lStart, lEnd : Integer;
lCurr, lOffset : Integer;
procedure CheckData;
var
iCount : Integer;
begin
cdsTemp.Data := ClientDataSet1.Data;
while not (cdsGeneral.Eof) do
begin
if (cdsTemp.Locate('NUM', cdsGeneral.FieldByName('NUM').Value, []) ) then
cdsGeneral.Delete
else
cdsGeneral.Next;
end;
cdsGeneral.MergeChangeLog;
end;
begin
lStart := GetTickCount;
if not (ClientDataSet1.Locate('NAME', edtSearchField.Text, [loPartialKey, loCaseInsensitive]) ) then
begin
cdsGeneral.Close;
if (edtSearchField.Text = '*') then
begin
cdsGeneral.Active := False;
cdsGeneral.Active := True;
end
else
begin
cdsGeneral.CommandText := 'select * from cust where NAME like ' + '''' + edtSearchField.Text + '%''';
cdsGeneral.Open;
if (cdsGeneral.RecordCount > 0) then
begin
lCurr := ClientDataSet1.RecNo;
lOffset := ClientDataSet1.RecordCount - lCurr + 1;
CheckData;
ClientDataSet1.AppendData(cdsGeneral.Data, False);
ClientDataSet1.MoveBy(lOffset);
end;
end;
end;
edtRecNo.Text := IntToStr(ClientDataSet1.RecordCount);
lEnd := GetTickCount;
edtRecNo.Text := IntToStr(ClientDataSet1.RecordCount);
edtTime.Text := FloatToStr((lEnd - lStart) / 1000.0) + '
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -