Componentes.Terceros.RemObj.../internal/6.0.43.801/1/RemObjects Samples/Data Abstract for Delphi/Dynamic Where/fClientForm.pas
2010-01-29 16:17:43 +00:00

183 lines
5.0 KiB
ObjectPascal

unit fClientForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
uROClient, uROClientIntf, uRORemoteService, uROBinMessage,
uROPoweredByRemObjectsButton, uDAPoweredByDataAbstractButton, ExtCtrls, Grids,
DBGrids, uDAInterfaces;
type
TClientForm = class(TForm)
Panel1: TPanel;
DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton;
Label1: TLabel;
cbConditions: TComboBox;
Panel2: TPanel;
Label2: TLabel;
edXML: TMemo;
Panel4: TPanel;
btLoad: TButton;
btValidate: TButton;
dgData: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure cbConditionsChange(Sender: TObject);
procedure btValidateClick(Sender: TObject);
procedure btLoadClick(Sender: TObject);
private
{ Private declarations }
function GetTemplateWhereExpression: TDAWhereExpression;
procedure ShowXML(aExpr: TDAWhereExpression);
public
{ Public declarations }
end;
var
ClientForm: TClientForm;
implementation
uses
fClientDataModule;
{$R *.dfm}
procedure TClientForm.btLoadClick(Sender: TObject);
var
wb: TDAWhereBuilder;
expr: TDAWhereExpression;
expArr: array of TDAWhereExpression;
begin
wb := TDAWhereBuilder.Create;
try
with ClientDataModule do begin
tbl_Workers.ClearRows(true);
if Trim(edXML.Text) <> ''
then expr := wb.XMLToExpression(edXML.Text)
else expr := nil;
SetLength(expArr, 1);
expArr[0] := expr;
RemoteDataAdapter.Fill([tbl_Workers], expArr);
end;
except
on E: Exception do ShowMessage('Error loading data: ' + E.Message);
end;
wb.Free;
end;
procedure TClientForm.btValidateClick(Sender: TObject);
var
expr: TDAWhereExpression;
wb: TDAWhereBuilder;
begin
wb := TDAWhereBuilder.Create;
try
try
expr := wb.XMLToExpression(edXML.Text);
expr.Validate;
ShowMessage('XML Where expression is valid');
except
on E: Exception do ShowMessage('XML Where expression is INVALID: ' + E.Message);
end;
finally
wb.Free;
end;
end;
procedure TClientForm.cbConditionsChange(Sender: TObject);
var
expr: TDAWhereExpression;
begin
expr := GetTemplateWhereExpression;
ShowXML(expr);
end;
procedure TClientForm.FormCreate(Sender: TObject);
begin
// TODO: until DynamicRequest bug fixed
//ClientDataModule.Login;
Application.Title := ClientForm.Caption;
cbConditionsChange(nil);
end;
function TClientForm.GetTemplateWhereExpression: TDAWhereExpression;
var
wb: TDAWhereBuilder;
begin
Result := nil;
wb := TDAWhereBuilder.Create;
with wb, ClientDataModule.tbl_Workers do
case cbConditions.ItemIndex of
//Position is Sales Manager
0: Result := NewBinaryExpression(
NewField(LogicalName, 'WorkerPosition'),
NewConstant('Sales Manager', datString),
dboEqual);
//Job is Sales Manager And City is Chicago
1: Result := NewBinaryExpression(
NewBinaryExpression(
NewField(LogicalName, 'WorkerPosition'),
NewConstant('Sales Manager', datString),
dboEqual),
NewBinaryExpression(
NewField(LogicalName, 'WorkerCity'),
NewConstant('Chicago IL', datString),
dboEqual),
dboAnd);
//City is Chicago or Atlanta
2: Result := NewBinaryExpression(
NewField(LogicalName, 'WorkerCity'),
NewList([NewConstant('Chicago IL', datString), NewConstant('Atlanta CA', datString)]),
dboIn);
//FirstName doesn't begin with A
3: Result := NewUnaryExpression(
NewBinaryExpression(
NewField(LogicalName, 'WorkerFirstName'),
NewConstant('A%', datString),
dboLike),
duoNot);
//(Position is Sales Representative Or Zip is NULL) And (City is Kirkland or Seattle)
4: Result := NewBinaryExpression(
NewBinaryExpression(
NewBinaryExpression(
NewField(LogicalName, 'WorkerPosition'),
NewConstant('Sales Representative', datString),
dboEqual),
NewBinaryExpression(
NewField(LogicalName, 'WorkerZip'),
NewNull,
dboEqual),
dboOr),
NewBinaryExpression(
NewField(LogicalName, 'WorkerCity'),
NewList(
[NewConstant('Kirkland', datString),
NewConstant('Seattle', datString)]
),
dboIn),
dboAnd);
// Wrong condition - incorrect field name
6: Result := NewBinaryExpression(
NewField(LogicalName, 'Country_Name'),
NewConstant('UK', datString),
dboEqual);
end;
wb.Free;
end;
procedure TClientForm.ShowXML(aExpr: TDAWhereExpression);
var
wb: TDAWhereBuilder;
begin
edXML.Clear;
if Assigned(aExpr) then begin
wb := TDAWhereBuilder.Create;
wb.Expression := aExpr;
edXML.Text := wb.Xml;
wb.Free;
end;
end;
end.