1 |
tony |
45 |
For a more detail version of this text see docs/readme.firebirdarrays.html
|
2 |
|
|
|
3 |
|
|
Example applications are provided for both one and two dimensional arrays. In each case,
|
4 |
|
|
the example applications create their own database and populate it with test data when
|
5 |
|
|
first run. Note that you will typically need to run the application before accessing
|
6 |
|
|
database properties in the IDE. This is in order to create the database referenced by the IDE.
|
7 |
|
|
|
8 |
|
|
Database Creation
|
9 |
|
|
-----------------
|
10 |
|
|
|
11 |
|
|
The IBDatabase property “CreateIfNotExists” is set to true in both examples. This
|
12 |
|
|
means that if the database does not exist when an attempt is made to connect to
|
13 |
|
|
it then the database is created. After it is created, the “OnCreateDatabase”
|
14 |
|
|
event handler is used to add a table to the newly created database and to
|
15 |
|
|
populate it with test data. The application then continues as if the database already existed.
|
16 |
|
|
|
17 |
|
|
By default, the database is created in the defined temporary directory. This
|
18 |
|
|
behaviour can be overridden by editing the example's “unit1” unit to remove
|
19 |
|
|
the “{$DEFINE LOCALDATABASE}” directive and setting the const “sDatabaseName”
|
20 |
|
|
to the required path e.g.
|
21 |
|
|
|
22 |
|
|
const
|
23 |
|
|
sDatabaseName = 'myserver:/databases/test.fdb';
|
24 |
|
|
|
25 |
|
|
1D Array Example
|
26 |
|
|
----------------
|
27 |
|
|
|
28 |
|
|
In this case, the test data table is defined as
|
29 |
|
|
|
30 |
|
|
Create Table TestData (
|
31 |
|
|
RowID Integer not null,
|
32 |
|
|
Title VarChar(32) Character Set UTF8,
|
33 |
|
|
MyArray Double Precision [1:12],
|
34 |
|
|
Primary Key(RowID)
|
35 |
|
|
);
|
36 |
|
|
|
37 |
|
|
Each row includes a floating point array with twelve elements. In the
|
38 |
|
|
example application, the table is displayed and edited using a DBControlGrid.
|
39 |
|
|
The title field is interpreted as a “Department” and displayed using a
|
40 |
|
|
TDBEdit control. The array field is interpreted as sales by month and
|
41 |
|
|
displayed as a one dimensional TIBArrayGrid with column labels. The
|
42 |
|
|
example allows both the Departname Name and monthly sales values
|
43 |
|
|
to be updated and changes saved. New rows can be inserted and
|
44 |
|
|
existing rows deleted.
|
45 |
|
|
|
46 |
|
|
Note: there is an LCL bug (http://bugs.freepascal.org/view.php?id=30892) which
|
47 |
|
|
will cause the 1D array example to render incorrectly. That is only the
|
48 |
|
|
focused row will show the array. The bug report includes an LCL
|
49 |
|
|
patch to fix this problem.
|
50 |
|
|
|
51 |
|
|
2D Array Example
|
52 |
|
|
----------------
|
53 |
|
|
|
54 |
|
|
In this case, the test data table is defined as
|
55 |
|
|
|
56 |
|
|
Create Table TestData (
|
57 |
|
|
RowID Integer not null,
|
58 |
|
|
Title VarChar(32) Character Set UTF8,
|
59 |
|
|
MyArray VarChar(16) [0:16, -1:7] Character Set UTF8,
|
60 |
|
|
Primary Key(RowID)
|
61 |
|
|
);
|
62 |
|
|
|
63 |
|
|
Each row includes a two dimensional string array with indices 0..16 and -1 to 7.
|
64 |
|
|
The grid interprets the first index as a column index and the second as a row
|
65 |
|
|
index (i.e. x,y Cartesian co-ordinates).
|
66 |
|
|
|
67 |
|
|
The example program displays a row at a time with a navigation bar
|
68 |
|
|
providing the means to scroll through the dataset, as well as saving
|
69 |
|
|
or cancelling changes, inserting and deleting rows.
|
70 |
|
|
|
71 |
|
|
This example illustrates the use of both column and row labels.
|
72 |
|
|
|
73 |
|
|
|