⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flargedatasetclientmain.pas

📁 delphi多层应用系统 delphi多层应用系统
💻 PAS
字号:
unit fLargeDataSetClientMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBClient, MConnect, SConnect, StdCtrls, ExtCtrls, DBCtrls, Grids,
  DBGrids;

type
  TForm2 = class(TForm)
    ClientDataSet1: TClientDataSet;
    SocketConnection1: TSocketConnection;
    DataSource1: TDataSource;
    DBNavigator1: TDBNavigator;
    Panel1: TPanel;
    edtSearchField: TEdit;
    edtRecNo: TEdit;
    edtTime: TEdit;
    DBGrid1: TDBGrid;
    btnLocate: TButton;
    btnImproved: TButton;
    ClientDataSet2: TClientDataSet;
    cdsTemp: TClientDataSet;
    btnQuery: TButton;
    btnGeneral: TButton;
    ClientDataSet3: TClientDataSet;
    procedure FormActivate(Sender: TObject);
    procedure FormDeactivate(Sender: TObject);
    procedure btnLocateClick(Sender: TObject);
    procedure btnImprovedClick(Sender: TObject);
    procedure btnQueryClick(Sender: TObject);
    procedure btnGeneralClick(Sender: TObject);
  private
    { Private declarations }
    bFunc : Boolean;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.FormActivate(Sender: TObject);
begin
  SocketConnection1.Connected := True;
  ClientDataSet1.Active := True;
  bFunc := True;
  edtRecNo.Text := IntToStr(ClientDataSet1.RecordCount);
end;

procedure TForm2.FormDeactivate(Sender: TObject);
begin
  ClientDataSet1.Active := False;
  SocketConnection1.Connected := False;
end;

procedure TForm2.btnLocateClick(Sender: TObject);
begin
  bFunc := True;
end;

procedure TForm2.btnImprovedClick(Sender: TObject);
begin
  bFunc := False;
end;

procedure TForm2.btnQueryClick(Sender: TObject);
var
  lStart, lEnd : Integer;
  lCurr, lOffset : Integer;

  procedure CheckData;
  var
    iCount : Integer;
  begin
    cdsTemp.Data := ClientDataSet1.Data;
    while not (ClientDataSet2.Eof) do
    begin
      if (cdsTemp.Locate('NAME', ClientDataSet2.FieldByName('NAME').Value, []) ) then
        ClientDataSet2.Delete
      else
        ClientDataSet2.Next;
    end;
    ClientDataSet2.MergeChangeLog;
  end;
begin
  lStart := GetTickCount;
  if (bFunc) then
  begin
    ClientDataSet1.Locate('NAME', edtSearchField.Text, [loPartialKey, loCaseInsensitive]);
    edtRecNo.Text := IntToStr(ClientDataSet1.RecordCount);
  end
  else
  begin
    ClientDataSet2.Close;
    ClientDataSet2.CommandText := 'select * from cust where NAME like ''' + edtSearchField.Text + '%''';
    ClientDataSet2.Open;
    lCurr := ClientDataSet1.RecNo;
    lOffset := ClientDataSet1.RecordCount - lCurr + 1;
    CheckData;
    ClientDataSet1.AppendData(ClientDataSet2.Data, False);
    ClientDataSet1.MoveBy(lOffset);
  end;
  lEnd := GetTickCount;
  edtRecNo.Text := IntToStr(ClientDataSet1.RecordCount);

  edtTime.Text := FloatToStr((lEnd - lStart) / 1000.0) + '

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -