235 lines
6.5 KiB
ObjectPascal
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.
|
|
|