You are here: Scripting Reference > Functions > Database > GetCustomDataSet

GetCustomDataSet

Declaration

procedure GetCustomDataSet(const aDataSet : TFloClientDataSet; const aFieldNames : array of string);

procedure GetCustomDataSet(const aDataSet : TFloClientDataSet; const aFieldDefinitions : array of string);

Description

Creates an empty dataset with either:

aDataSet should be one of the See "Global Datasets" (if within a Map), or a local dataset created with TFloClientDataset.Create (if within a Custom Script or a Map).

The dataset starts empty and you can add records to it as necessary. Refer to See "Data Set" class for information on what you can do with the dataset.

The accepted values for column type are: string, integer, boolean, memo, date, time, datetime. See Example 3 below.

(This page expanded in September 2018 to include aFieldDefinitions option and additional examples.)

Example 1 - Insert and Retrieve Data (Column Names only)

procedure ScriptEvent (var Value : variant);

var

// Data1, Data2, etc are pre-declared within a Map but must be explicitly declared for Custom Scripts

Data1: TFloClientDataSet;

begin

// Data1, Data2, etc are pre-initialised within a Map but must be explicitly initialised for Custom Scripts

Data1 := TFloClientDataSet.Create(nil);

// define the column structure of the dataset ...

GetCustomDataSet(Data1,['ID','Name']); // create the dataset, with columns named 'ID' and 'Name'

// add some data into the custom dataset ...

Data1.Insert; // insert a new row into the dataset

Data1['ID'].Value := '1'; // set the value of the ID field

Data1['Name'].Value := 'Cameron'; // set the value of the Name field

Data1.Post; // save the changes to this row

Data1.Insert; // insert another new row into the dataset

Data1['ID'].Value := '2';

Data1['Name'].Value := 'Dave';

Data1.Post;

Data1.Insert;

Data1['ID'].Value := '10';

Data1['Name'].Value := 'Eddie';

Data1.Post;

// optional: sort the dataset (on the ID column) ...

Data1.IndexFieldNames := 'ID';

// retrieve data from the custom dataset ...

// Note: custom dataset columns are string(255) by default, so the sort returns '1', '10', '2'

Data1.First;

while (not Data1.EOF) do

begin

LogInfo('ID:' + Data1['ID'].AsString + ';Name:' + Data1['Name'].AsString); // read values from the dataset

Data1.Next;

end;

// Data1, Data2, etc are cleaned up automatically by a Map but must be explicitly removed for Custom Scripts

if (Assigned(Data1)) then

Data1.Free;

end;

Example 2 - List default Column Types (when defined with Names only)

procedure ScriptEvent (var Value : variant);

var

// Data1, Data2, etc are pre-declared within a Map but must be explicitly declared for Custom Scripts

Data1: TFloClientDataSet; f: integer; vField: TField; vInfoStr: string;

begin

// Data1, Data2, etc are pre-initialised within a Map but must be explicitly initialised for Custom Scripts

Data1 := TFloClientDataSet.Create(nil);

// define the column structure of the dataset - specify Names and accept default Type(Size) of string(255) ...

GetCustomDataSet(Data1,['ID','Name']); // create the dataset, with columns named 'ID' and 'Name'

for f := 0 to (Data1.Fields.Count - 1) do

begin

vField := Data1.Fields.Fields[f];

vInfoStr := 'Field/column ' + IntToStr(f) + ': ';

vInfoStr := vInfoStr + 'Name=' + vField.FieldName + ';';

vInfoStr := vInfoStr + 'Type=' + IntToStr(Ord(vField.DataType)) + ';'; // see note below

vInfoStr := vInfoStr + 'Size=' + IntToStr(vField.Size) + ';';

vInfoStr := vInfoStr + IfThen(vField.Required, 'Reqd=Yes', 'Reqd=No') + '.';

LogInfo(vInfoStr);

end;

// Data1, Data2, etc are cleaned up automatically by a Map but must be explicitly removed for Custom Scripts

if (Assigned(Data1)) then

Data1.Free;

end;

Note: The list of column Type index values and codes is set out in TFieldType.

Example 3 - Specify Column Names, Types, Sizes, and whether Required

When the aFieldDefinitions option is used, then in addition to the Name of each column you can specify:

A column definition is of the form:

Valid values for column Type are: string, integer, boolean, memo, date, time, datetime.

To specify that a column is Required use one of: required, req, true, yes; to specify that a column is not Required use one of: optional, opt, false, no.

The Type will default to string if not specified; the Required flag will default to optional if not specified.

Example from script below: GetCustomDataSet(Data1,['ID,integer,req','Name,string,50']);

procedure ScriptEvent (var Value : variant);

var

// Data1, Data2, etc are pre-declared within a Map but must be explicitly declared for Custom Scripts

Data1: TFloClientDataSet; f: integer; vField: TField; vInfoStr: string;

begin

// Data1, Data2, etc are pre-initialised within a Map but must be explicitly initialised for Custom Scripts

Data1 := TFloClientDataSet.Create(nil);

// define the column structure of the dataset ...

GetCustomDataSet(Data1,['ID,integer,req','Name,string,50']); // create the dataset, with columns named 'ID' and 'Name'

for f := 0 to (Data1.Fields.Count - 1) do

begin

vField := Data1.Fields.Fields[f];

vInfoStr := 'Field/column ' + IntToStr(f) + ': ';

vInfoStr := vInfoStr + 'Name=' + vField.FieldName + ';';

vInfoStr := vInfoStr + 'Type=' + IntToStr(Ord(vField.DataType)) + ';';

if (vField.Size > 0) then

vInfoStr := vInfoStr + 'Size=' + IntToStr(vField.Size) + ';';

vInfoStr := vInfoStr + IfThen(vField.Required, 'Reqd=Yes', 'Reqd=No') + '.';

LogInfo(vInfoStr);

end;

// add some data into the custom dataset ...

Data1.Insert; // insert a new row into that dataset

Data1['ID'].Value := 1; // set the value of the ID field

Data1['Name'].Value := 'Cameron'; // set the value of the Name field

Data1.Post; // save the changes to this row

Data1.Insert; // insert another new row into the dataset

Data1['ID'].Value := 2;

Data1['Name'].Value := 'Dave';

Data1.Post;

Data1.Insert;

Data1['ID'].Value := 10;

Data1['Name'].Value := 'Eddie';

Data1.Post;

// optional: sort the dataset (on the ID column) ...

Data1.IndexFieldNames := 'ID';

// retrieve data from the custom dataset ...

// Note: ID custom column is now type integer, so the sort returns 1, 2, 10

Data1.First;

while (not Data1.EOF) do

begin

LogInfo('ID:' + Data1['ID'].AsString + ';Name:' + Data1['Name'].AsString); // read values from the dataset

Data1.Next;

end;

// Data1, Data2, etc are cleaned up automatically by a Map but must be explicitly removed for Custom Scripts

if (Assigned(Data1)) then

Data1.Free;

end;