Specify Column Names, Types, Sizes, & Whether Required
When the aFieldDefinitions option is used, in addition to the Name of each column you can specify -
The Type of each column
The Size of each string column
Whether or not a Value is required in each of the columns.
A column definition is of the form -
'<name>,string,<stringsize>,<reqcode>' (for string columns), or
'<name>,<type>,<reqcode>' for non-string columns
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.
Data1, Data2, Data3 etc are pre-declared within a Map, but must be explicitly declared within a Custom Script.
Data1, Data2, Data3 etc are pre-initialised within a Map, but must be explicitly initialised within a Custom Script.
Data1, Data2, Data3 etc are cleaned up automatically by a Map, but must be explicitly removed for Custom Script.
Example of script below.
procedure
ScriptEvent (
var
Value : variant);
var
Data1: TFloClientDataSet; f:
integer
; vField: TField; vInfoStr:
string
;
begin
Data1 := TFloClientDataSet
.
Create(
nil
);
// define the column structure of the dataset ...
// create the dataset, with columns named 'ID' and 'Name'
GetCustomDataSet(Data1,[
'ID,integer,req'
,
'Name,string,50'
]);
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 :=
'Betty'
;
// 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 :=
'Nigel'
;
Data1
.
Post;
Data1
.
Insert;
// insert another new row into the dataset
Data1[
'ID'
].Value :=
10
;
Data1[
'Name'
].Value :=
'Roger'
;
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
// read values from the dataset
LogInfo(
'ID:'
+ Data1[
'ID'
].AsString +
';Name:'
+ Data1[
'Name'
].AsString);
Data1
.
Next;
end
;
if
(Assigned(Data1))
then
Data1
.
Free;
end
;