FetchPooler (Delphi)
Description
This example fills in the parameters of a client dataset from the entries of a list box.
Code
procedure TForm1.ClientDataSet1AfterGetParams(Sender: TObject;
var OwnerData: OleVariant);
begin
// ListBox1.Items.Add('AfterGetParams called');
end;
procedure TForm1.ClientDataSet1BeforeGetParams(Sender: TObject;
var OwnerData: OleVariant);
begin
// ListBox1.Items.Add('BeforeGetParams called');
end;
procedure TForm1.ClientDataSet1BeforeGetRecords(Sender: TObject; var OwnerData: OleVariant);
var
LastValue: OleVariant;
CDSClone: TClientDataSet;
begin
if ClientDataSet1.Active then
begin
CDSClone := TClientDataSet.Create(Form1);
try
CDSClone.CloneCursor(ClientDataSet1, True);
{ Turn off FetchOnDemand so that the clone only fetches
the last LOCAL record. }
CDSClone.FetchOnDemand := False;
CDSClone.Last;
LastValue := CDSClone.Fields[0].AsString;
CDSClone.Close;
finally
CDSClone.Free;
end;
end else
LastValue := NULL;
OwnerData := VarArrayOf([Memo1.Lines.Text, LastValue]);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.PacketRecords := StrToInt(Edit1.Text);
ClientDataSet1.GetNextPacket;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
if not RemoteServer1.Connected then
RemoteServer1.Connected := True;
ClientDataSet1.Close;
with RemoteServer1 do
begin
for I := 0 to DataSetCount - 1 do
DataSets[I].EnableControls;
end;
ClientDataSet1.Open;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
I: Integer;
begin
ClientDataSet1.Close;
RemoteServer1.Connected := False;
with RemoteServer1 do
begin
for I := 0 to DataSetCount - 1 do
DataSets[I].DisableControls;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
I: Integer;
ListItem: string;
begin
{ Call FetchParams to ensure that parameters reflect server metadata. }
ClientDataSet1.FetchParams;
with ClientDataSet1.Params do
begin
for I := 0 to Count - 1 do
begin
ListItem := ListBox1.Items[I];
case Items[I].DataType of
ftString:
Items[I].AsString := ListItem;
ftSmallInt:
Items[I].AsSmallInt := StrToIntDef(ListItem, 0);
ftInteger:
Items[I].AsInteger := StrToIntDef(ListItem, 0);
ftWord:
Items[I].AsWord := StrToIntDef(ListItem, 0);
ftBoolean:
begin
if ListItem = 'True' then
Items[I].AsBoolean := True
else
Items[I].AsBoolean := False;
end;
ftFloat:
Items[I].AsFloat := StrToFloat(ListItem);
ftCurrency:
Items[I].AsCurrency := StrToFloat(ListItem);
ftBCD:
Items[I].AsBCD := StrToCurr(ListItem);
ftDate:
Items[I].AsDate := StrToDate(ListItem);
ftTime:
Items[I].AsTime := StrToTime(ListItem);
ftDateTime:
Items[I].AsDateTime := StrToDateTime(ListItem);
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.Add('Here is a string');
ListBox1.Items.Add('4');
ListBox1.Items.Add('3456789');
ListBox1.Items.Add('34');
ListBox1.Items.Add('0');
ListBox1.Items.Add('12.56');
ListBox1.Items.Add('4.23');
ListBox1.Items.Add('99.5');
ListBox1.Items.Add('4/12/53');
ListBox1.Items.Add('7:45:00');
ListBox1.Items.Add('4/12/53 7:45:00');
end;
Uses
- Datasnap.DBClient.TCustomClientDataSet.Params ( fr | de | ja )
- Data.DB.TParams.Items ( fr | de | ja )
- Data.DB.TParam.DataType ( fr | de | ja )
- Data.DB.TParam.AsBCD ( fr | de | ja )
- Data.DB.TParam.AsBoolean ( fr | de | ja )
- Data.DB.TParam.AsCurrency ( fr | de | ja )
- Data.DB.TParam.AsDate ( fr | de | ja )
- Data.DB.TParam.AsDateTime ( fr | de | ja )
- Data.DB.TParam.AsFloat ( fr | de | ja )
- Data.DB.TParam.AsInteger ( fr | de | ja )
- Data.DB.TParam.AsSmallInt ( fr | de | ja )
- Data.DB.TParam.AsString ( fr | de | ja )
- Data.DB.TParam.AsTime ( fr | de | ja )
- Data.DB.TParam.AsWord ( fr | de | ja )