Componentes.Terceros.RemObj.../official/5.0.24.615/Data Abstract for Delphi/Samples/Data Streamers/fMainForm.pas

235 lines
6.5 KiB
ObjectPascal

unit fMainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Grids, DBGrids, ExtCtrls, DBCtrls,
uDADataTable, uDABINAdapter, uDAClasses, uDADriverManager, uDAInterfaces,
uDADataStreamer, uDAScriptingProvider, uDACDSDataTable, uDAEngine,
uDAADODriver;
type
TForm1 = class(TForm)
DADriverManager1: TDADriverManager;
DAADODriver1: TDAADODriver;
DAConnectionManager1: TDAConnectionManager;
dtCustomers: TDACDSDataTable;
dsCustomers: TDADataSource;
DBGrid1: TDBGrid;
dtOrders: TDACDSDataTable;
dsOrders: TDADataSource;
DBGrid2: TDBGrid;
Panel1: TPanel;
DBNavigator2: TDBNavigator;
Button3: TButton;
cbApplyOrdersSchema: TCheckBox;
Panel2: TPanel;
cbApplyCustomersSchema: TCheckBox;
Button2: TButton;
DBNavigator1: TDBNavigator;
Panel3: TPanel;
Panel4: TPanel;
btn_TestDatasets: TButton;
cbSkipCustomers: TCheckBox;
cbSkipOrders: TCheckBox;
btn_TurnMD: TButton;
cbCloseBeforeTest: TCheckBox;
btn_ShowDeltaCounters: TButton;
btn_TestDeltas: TButton;
btn_ClearMemo: TButton;
Memo: TMemo;
DASchema1: TDASchema;
DABinDataStreamer: TDABinDataStreamer;
procedure FormCreate(Sender: TObject);
procedure btn_TestDatasetsClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure btn_TurnMDClick(Sender: TObject);
procedure btn_ShowDeltaCountersClick(Sender: TObject);
procedure btn_TestDeltasClick(Sender: TObject);
procedure btn_ClearMemoClick(Sender: TObject);
private
fConnection: IDAConnection;
end;
var
Form1: TForm1;
implementation
uses uROTypes, uDADelta;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
fConnection := DAConnectionManager1.NewConnection('ADO');
end;
procedure TForm1.btn_TestDatasetsClick(Sender: TObject);
var
stream: Binary;
customers,
orders: IDADataset;
i: integer;
start: Cardinal;
begin
if cbCloseBeforeTest.Checked then begin
dtCustomers.Close;
dtOrders.Close;
end;
stream := Binary.Create;
with DABinDataStreamer do try
customers := DASchema1.NewDataset(fConnection, 'Customers');
//customers.Where.AddText(' 1=2');
orders := DASchema1.NewDataset(fConnection, 'Orders');
//orders.Where.AddText(' 1=2');
start := GetTickCount;
// Writes the data
Initialize(stream, aiWrite);
if not cbSkipCustomers.Checked then WriteDataset(customers, [woSchema, woRows], -1);
if not cbSkipOrders.Checked then WriteDataset(orders, [woRows, woSchema], -1);
Finalize;
// End of write data
Memo.Lines.Add('WRITE completed in ' + IntToStr(GetTickCount - start) + 'ms');
// Logging info
Memo.Lines.Add('Stream is now ' + IntToStr(stream.Size) + ' bytes long');
start := GetTickCount;
Initialize(stream, aiReadFromBeginning);
// Reads the data
if not cbSkipCustomers.Checked then begin
if cbApplyCustomersSchema.Checked then
ReadDataset('Customers', dtCustomers, TRUE)
else
ReadDataset('Customers', dtCustomers);
end;
if not cbSkipOrders.Checked then begin
if cbApplyOrdersSchema.Checked then
ReadDataset('Orders', dtOrders, TRUE)
else
ReadDataset('Orders', dtOrders);
end;
Finalize;
// End of read data
Memo.Lines.Add('READ completed in ' + IntToStr(GetTickCount - start) + 'ms');
// Logging info
Memo.Lines.Add('The stream contains ' + IntToStr(DatasetCount) + ' datasets and ' + IntToStr(DeltaCount) + ' deltas');
for i := 0 to (DatasetCount - 1) do Memo.Lines.Add('Dataset -> ' + DatasetNames[i]);
for i := 0 to (DeltaCount - 1) do Memo.Lines.Add('Delta -> ' + DeltaNames[i]);
Memo.Lines.Add(' ');
finally
stream.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
dtCustomers.Active := dtCustomers.Active xor TRUE;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
dtOrders.Active := dtOrders.Active xor TRUE
end;
procedure TForm1.btn_TurnMDClick(Sender: TObject);
begin
if dtOrders.MasterSource = nil then begin
dtOrders.MasterFields := 'CustomerID';
dtOrders.DetailFields := 'CustomerID';
dtOrders.MasterSource := dsCustomers;
end
else begin
dtOrders.MasterSource := nil;
dtOrders.MasterFields := '';
dtOrders.DetailFields := '';
end;
btn_TestDatasets.Enabled := dtOrders.MasterSource = nil;
end;
procedure TForm1.btn_ShowDeltaCountersClick(Sender: TObject);
begin
ShowMessage(Format('Changes: Customers %d, Orders %d', [dtCustomers.Delta.Count, dtOrders.Delta.Count]));
end;
procedure TForm1.btn_TestDeltasClick(Sender: TObject);
var
stream: TStream;
i: integer;
orddelta,
custdelta: TDADelta;
begin
if not dtCustomers.Active or not dtOrders.Active then begin
MessageDlg('Both datatables must be open!', mtError, [mbOK], 0);
Exit;
end;
stream := TMemoryStream.Create;
custdelta := TDADelta.Create(dtCustomers);
orddelta := TDADelta.Create(dtOrders);
with DABinDataStreamer do try
// Writes the data
Initialize(stream, aiWrite);
if not cbSkipCustomers.Checked then WriteDelta(dtCustomers);
if not cbSkipOrders.Checked then WriteDelta(dtOrders);
Finalize;
// End of write data
// Logging info
Memo.Lines.Add('Stream is now ' + IntToStr(stream.Size) + ' bytes long');
Initialize(stream, aiReadFromBeginning);
// Reads the data
if not cbSkipCustomers.Checked then begin
ReadDelta('dtCustomers', custdelta);
Memo.Lines.Add('Customers delta contains ' + IntToStr(custdelta.Count) + ' changes');
end;
if not cbSkipOrders.Checked then begin
ReadDelta('dtOrders', orddelta);
Memo.Lines.Add('Orders delta contains ' + IntToStr(orddelta.Count) + ' changes');
end;
Finalize;
// Logging info
Memo.Lines.Add('The stream contains ' + IntToStr(DatasetCount) + ' datasets and ' + IntToStr(DeltaCount) + ' deltas');
for i := 0 to (DatasetCount - 1) do Memo.Lines.Add('Dataset -> ' + DatasetNames[i]);
for i := 0 to (DeltaCount - 1) do Memo.Lines.Add('Delta -> ' + DeltaNames[i]);
Memo.Lines.Add(' ');
finally
stream.Free;
custdelta.Free;
orddelta.Free;
end;
end;
procedure TForm1.btn_ClearMemoClick(Sender: TObject);
begin
Memo.Lines.Clear;
end;
end.