tvplanit: Fix creation of MS-Access database file for demo of flex datastore-

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6512 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-06-20 05:26:38 +00:00
parent aa6e70e006
commit e90700a648
11 changed files with 349 additions and 86 deletions

View File

@ -0,0 +1,10 @@
Copy one of these two empty Access database file to the parent folder.
If you copied "data.mdb" then you must activate the define MDB in the head of
unit "Unit".
If you copied "data.accdb" then you must activate the define ACCDB.
Don't activate both!
Note: On 32-bit systems the ACCDB format has issues.

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="10"/>
<Version Value="11"/>
<PathDelim Value="\"/>
<General>
<SessionStorage Value="InProjectDir"/>
@ -17,9 +17,10 @@
<Version Value="2"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default"/>
</Modes>
</RunParams>
<RequiredPackages Count="4">
<Item1>
@ -58,7 +59,6 @@
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir);dbase"/>
<OtherUnitFiles Value="dbase"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Linking>
@ -73,7 +73,7 @@
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Exceptions Count="4">
<Item1>
<Name Value="EAbort"/>
</Item1>
@ -83,6 +83,9 @@
<Item3>
<Name Value="EFOpenError"/>
</Item3>
<Item4>
<Name Value="EODBCException"/>
</Item4>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="9"/>
<Version Value="11"/>
<PathDelim Value="\"/>
<General>
<SessionStorage Value="InProjectDir"/>
@ -9,11 +9,7 @@
<Title Value="CreateAccessDB"/>
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>
<Icon Value="0"/>
</General>
<VersionInfo>
<StringTable ProductVersion=""/>
</VersionInfo>
<BuildModes Count="1">
<Item1 Name="Default" Default="True"/>
</BuildModes>
@ -21,17 +17,21 @@
<Version Value="2"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default"/>
</Modes>
</RunParams>
<RequiredPackages Count="2">
<RequiredPackages Count="3">
<Item1>
<PackageName Value="SQLDBLaz"/>
<PackageName Value="FCL"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
<PackageName Value="SQLDBLaz"/>
</Item2>
<Item3>
<PackageName Value="LCL"/>
</Item3>
</RequiredPackages>
<Units Count="2">
<Unit0>
@ -39,7 +39,7 @@
<IsPartOfProject Value="True"/>
</Unit0>
<Unit1>
<Filename Value="..\..\..\odbcdatastore\camain.pas"/>
<Filename Value="camain.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="Form1"/>
<HasResources Value="True"/>

View File

@ -7,8 +7,8 @@ uses
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, caMain
{ you can add units after this };
Forms,
caMain;
{$R *.res}

View File

@ -1,7 +1,7 @@
object Form1: TForm1
Left = 262
Left = 413
Height = 285
Top = 155
Top = 171
Width = 400
AutoSize = True
Caption = 'Access database creator'
@ -9,7 +9,7 @@ object Form1: TForm1
ClientWidth = 400
Constraints.MinWidth = 400
OnCreate = FormCreate
LCLVersion = '1.6.4.0'
LCLVersion = '1.9.0.0'
object StatusBar1: TStatusBar
Left = 0
Height = 23
@ -103,28 +103,13 @@ object Form1: TForm1
TabOrder = 0
Text = '.\data.mdb'
end
object Label1: TLabel
AnchorSideLeft.Control = FileNameEdit
AnchorSideTop.Control = FileNameEdit
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = FileNameEdit
AnchorSideRight.Side = asrBottom
Left = 16
Height = 30
Top = 47
Width = 368
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 8
Caption = 'Use extension .mdb for old Access 97/2000 file format,'#13#10'.accdb for new Access 2007+ file format.'
ParentColor = False
end
object CbCreateVPFields: TCheckBox
AnchorSideLeft.Control = FileNameEdit
AnchorSideTop.Control = Label1
AnchorSideTop.Control = RgFormat
AnchorSideTop.Side = asrBottom
Left = 16
Height = 19
Top = 85
Top = 125
Width = 140
BorderSpacing.Top = 8
BorderSpacing.Bottom = 16
@ -133,13 +118,42 @@ object Form1: TForm1
State = cbChecked
TabOrder = 1
end
object RgFormat: TRadioGroup
AnchorSideLeft.Control = FileNameEdit
AnchorSideTop.Control = FileNameEdit
AnchorSideTop.Side = asrBottom
Left = 16
Height = 62
Top = 55
Width = 267
AutoFill = True
AutoSize = True
BorderSpacing.Top = 16
Caption = 'Access database format'
ChildSizing.LeftRightSpacing = 16
ChildSizing.TopBottomSpacing = 2
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 42
ClientWidth = 263
ItemIndex = 0
Items.Strings = (
'.mdb (Access 97, 2000, 2003), 32 bit only'
'.accdb (Access 2007+), 32 bit and 64 bit'
)
OnClick = RgFormatClick
TabOrder = 2
end
end
object ODBCConnection1: TODBCConnection
Connected = False
LoginPrompt = False
KeepConnection = False
Transaction = SQLTransaction1
Options = []
left = 48
top = 168
end
@ -147,7 +161,6 @@ object Form1: TForm1
Active = False
Action = caCommit
Database = ODBCConnection1
Options = []
left = 152
top = 168
end

View File

@ -18,17 +18,19 @@ type
BtnClose: TButton;
CbCreateVPFields: TCheckBox;
FileNameEdit: TFileNameEdit;
Label1: TLabel;
ODBCConnection1: TODBCConnection;
Panel1: TPanel;
Panel2: TPanel;
RgFormat: TRadioGroup;
SQLTransaction1: TSQLTransaction;
StatusBar1: TStatusBar;
procedure BtnCreateDBClick(Sender: TObject);
procedure BtnCloseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RgFormatClick(Sender: TObject);
private
function CreateAccessDatabase(DatabaseFile: string): boolean;
function CreateAccessDatabase(ADatabaseFile: string;
out AErrorMsg: String): boolean;
procedure CreateContactsTable;
procedure CreateEventsTable;
procedure CreateResourceTable;
@ -48,7 +50,16 @@ implementation
uses
LCLType, LazFileUtils;
Const
const
DB_DRIVERS: array[0..1] of String = (
'Microsoft Access Driver (*.mdb)',
'Microsoft Access Driver (*.mdb, *.accdb)'
);
EXT: array[0..1] of String = (
'.mdb',
'.accdb'
);
ODBC_ADD_DSN = 1;
ODBC_CONFIG_DSN = 2;
ODBC_REMOVE_DSN = 3;
@ -69,26 +80,34 @@ function SQLInstallerError(iError: integer; pfErrorCode: PInteger;
procedure TForm1.BtnCreateDBClick(Sender: TObject);
var
fn: String;
errMsg: String;
begin
if FileNameEdit.FileName = '' then
exit;
fn := ExpandFileNameUTF8(FilenameEdit.FileName);
fn := ChangeFileExt(FilenameEdit.FileName, EXT[RgFormat.ItemIndex]);
fn := ExpandFileNameUTF8(fn);
if FileExistsUTF8(fn) then
DeleteFileUTF8(fn);
// Create empty database file
CreateAccessDatabase(fn);
StatusMsg('Database file created');
if CreateAccessDatabase(fn, errMsg) then
StatusMsg('Database file created')
else begin
MessageDlg('Database file could not be created:' + LineEnding + errMsg,
mtError, [mbOK], 0);
exit;
end;
if CbCreateVPFields.Checked then begin
//connection
ODBCConnection1.Driver := 'Microsoft Access Driver (*.mdb, *.accdb)';
ODBCConnection1.Driver := DB_DRIVERS[RgFormat.ItemIndex];
ODBCConnection1.Params.Add('DBQ=' + fn);
ODBCConnection1.Params.Add('Locale Identifier=1031');
ODBCConnection1.Params.Add('ExtendedAnsiSQL=1');
ODBCConnection1.Params.Add('CHARSET=ansi');
ODBCConnection1.Connected := True;
// ODBCConnection1.Params.Add('Locale Identifier=1031');
// ODBCConnection1.Params.Add('ExtendedAnsiSQL=1');
// ODBCConnection1.Params.Add('CHARSET=ansi');
ODBCConnection1.KeepConnection := True;
ODBCConnection1.Connected := True;
//transaction
SQLTransaction1.DataBase := ODBCConnection1;
@ -113,55 +132,64 @@ begin
Close;
end;
function TForm1.CreateAccessDatabase(DatabaseFile: string): boolean;
function TForm1.CreateAccessDatabase(ADatabaseFile: string;
out AErrorMsg: String): boolean;
var
dbType: string;
driver: string;
ErrorCode, ResizeErrorMessage: integer;
ErrorMessage: PChar;
retCode: integer;
L: TStrings;
begin
driver := 'Microsoft Access Driver (*.mdb, *.accdb)';
Result := false;
AErrorMsg := '';
{ With this driver,
driver := DB_DRIVERS[rgFormat.ItemIndex];
{ With the new accdb driver,
CREATE_DB/CREATE_DBV12 will create an .accdb format database;
CREATE_DBV4 will create an mdb
http://stackoverflow.com/questions/9205633/how-do-i-specify-the-odbc-access-driver-format-when-creating-the-database
}
case Lowercase(ExtractFileExt(DatabaseFile)) of
'', '.', '.mdb':
dbType := 'CREATE_DBV4="' + DatabaseFile + '"';
'.accdb':
dbtype := 'CREATE_DBV12="' + DatabaseFile + '"';
else
raise Exception.CreateFmt('File format "%s" not supported.', [ExtractFileExt(DatabaseFile)]);
case rgFormat.ItemIndex of
0 : dbtype := 'CREATE_DB="' + ADatabaseFile + '"';
1 : case Lowercase(ExtractFileExt(ADatabaseFile)) of
'', '.', '.mdb': dbType := 'CREATE_DBV4="' + ADatabaseFile + '"';
'.accdb' : dbtype := 'CREATE_DBV12="' + ADatabaseFile + '"';
else
raise Exception.CreateFmt('File format "%s" not supported.', [ExtractFileExt(ADatabaseFile)]);
end;
end;
// DBPChar := 'CREATE_DBV4="' + DatabaseFile + '"';
retCode := SQLConfigDataSource(Hwnd(nil), ODBC_ADD_DSN, PChar(driver), PChar(dbType));
if retCode <> 0 then
// returns 1 in case of success, 0 in case of failure
if retCode <> 0 then begin
if not FileExists(ADatabaseFile) then
AErrorMsg := 'Successful creation reported, but file not found.'
else
Result := true
end else
begin
//try alternate driver
driver := 'Microsoft Access Driver (*.mdb)';
dbType := 'CREATE_DB="' + DatabaseFile + '"';
retCode := SQLConfigDataSource(Hwnd(nil), ODBC_ADD_DSN, PChar(driver), PChar(dbType));
end;
if retCode = 0 then
result := true
else
begin
result := false;
ErrorCode := 0;
ResizeErrorMessage := 0;
// todo: verify how the DLL is called - use pointers?; has not been tested.
GetMem(ErrorMessage, 512);
try
SQLInstallerError(1, @ErrorCode, ErrorMessage, SizeOf(ErrorMessage), @ResizeErrorMessage);
L := TStringList.Create;
try
L.Delimiter := ';';
L.StrictDelimiter := true;
L.DelimitedText := ErrorMessage;
AErrorMsg := L.Text;
finally
L.Free;
end;
finally
FreeMem(ErrorMessage);
end;
raise Exception.CreateFmt('Error creating Access database: %s', [ErrorMessage]);
end;
end;
@ -321,6 +349,12 @@ begin
FilenameEdit.ButtonWidth := FilenameEdit.Height;
end;
procedure TForm1.RgFormatClick(Sender: TObject);
begin
if FilenameEdit.Filename <> '' then
FilenameEdit.FileName := ChangeFileExt(FileNameEdit.FileName, EXT[RgFormat.ItemIndex]);
end;
procedure TForm1.StatusMsg(const AText: String);
begin
Statusbar1.SimpleText := AText;

View File

@ -0,0 +1,23 @@
Use the program CreateAccessDB to create an empty access databank, or one
which already contains the empty VisualPlanIt tables.
The database file can be created in two versions
* an *.mdb file of the old Access 97-2003. 32-bit only
* an *.accdb file for the newer Access 2007+ versions, 32 bit or 64 bit.
Note: On Win 10 the accdb driver is not installed by default. Install the
AccessDatabaseEngine (free Microsoft download):
* Office 2010: https://www.microsoft.com/en-us/download/details.aspx?id=13255
* Office 2007: https://www.microsoft.com/en-us/download/confirmation.aspx?id=23734
Note: At the time of this writing the program does not run without error,
reason unknown. However, before the error appears, the database file already
has been successfully created.
---------
The VisualPlanIt test program in the parent folder requires the database file
to be named either data.mdb or data.accdb. Copy the created mdb or accdb files
into the parent folder.

View File

@ -8,7 +8,7 @@ object Form1: TForm1
ClientWidth = 980
OnCreate = FormCreate
OnDestroy = FormDestroy
LCLVersion = '1.6.4.0'
LCLVersion = '1.9.0.0'
object Panel1: TPanel
Left = 0
Height = 33
@ -162,7 +162,6 @@ object Form1: TForm1
Align = alBottom
TabStop = True
TabOrder = 1
KBNavigation = True
DateLabelFormat = 'mmmm yyyy'
DayHeadAttributes.Font.Height = -13
DayHeadAttributes.Font.Name = 'Tahoma'
@ -171,6 +170,7 @@ object Form1: TForm1
DrawingStyle = dsFlat
EventDayStyle = []
HeadAttributes.Color = clBtnFace
KBNavigation = True
OffDayColor = clSilver
SelectedDayColor = clRed
ShowEvents = True
@ -357,7 +357,7 @@ object Form1: TForm1
top = 168
end
object VpResourceEditDialog1: TVpResourceEditDialog
Version = 'v1.05'
Version = 'v1.12'
DataStore = VpFlexDataStore1
Options = []
Placement.Position = mpCenter
@ -401,6 +401,7 @@ object Form1: TForm1
DataSources.ContactsDataSource = DsContacts
DataSources.TasksDataSource = DsTasks
ResourceID = 0
OnCreateTable = VpFlexDataStore1CreateTable
left = 136
top = 101
ResourceFieldMappings = (
@ -1294,15 +1295,14 @@ object Form1: TForm1
''
)
Transaction = SQLTransaction1
Options = []
Driver = 'Microsoft Access Driver (*.mdb)'
left = 136
top = 304
end
object SQLTransaction1: TSQLTransaction
Active = False
Action = caCommitRetaining
Database = ODBCConnection1
Options = []
left = 136
top = 368
end

View File

@ -2,6 +2,10 @@ unit Unit1;
{$mode objfpc}{$H+}
// Select one of these
{$DEFINE MDB}
{.$DEFINE ACCDB}
interface
uses
@ -68,8 +72,13 @@ type
procedure QryGridAfterInsert(DataSet: TDataSet);
procedure QryGridAfterEdit(DataSet: TDataSet);
procedure TabControl1Change(Sender: TObject);
procedure VpFlexDataStore1CreateTable(Sender: TObject; TableName: String);
private
{ private declarations }
procedure CreateContactsTable;
procedure CreateEventsTable;
procedure CreateResourceTable;
procedure CreateTasksTable;
public
{ public declarations }
end;
@ -82,9 +91,18 @@ implementation
{$R *.lfm}
uses
LazFileUtils;
LazFileUtils,
VpConst;
const
{$IFDEF MDB}
DB_NAME = '.\data.mdb'; // Access 97 file format
{$ENDIF}
{$IFDEF ACCDB}
DB_NAME = '.\data.accdb'; // Access 2007+ file format
{$ENDIF}
{ TForm1 }
// Adds a new resource
@ -125,22 +143,175 @@ begin
QryAllTasks.Open;
end;
procedure TForm1.CreateContactsTable;
begin
ODBCConnection1.ExecuteDirect(
'CREATE TABLE Contacts ('+
'RecordID COUNTER, ' +
'ResourceID INTEGER,' +
'FirstName VARCHAR(50) ,'+
'LastName VARCHAR(50) , '+
'Birthdate DATE, '+
'Anniversary DATE, '+
'Title VARCHAR(50), '+
'Company VARCHAR(50), '+
'Department VARCHAR(50), '+
'Job_Position VARCHAR(30), '+
'AddressType1 INTEGER, '+
'Address1 VARCHAR(100), '+
'City1 VARCHAR(50), '+
'State1 VARCHAR(25), '+
'Zip1 VARCHAR(10), '+
'Country1 VARCHAR(25), '+
'AddressType2 INTEGER, '+
'Address2 VARCHAR(100), '+
'City2 VARCHAR(50), '+
'State2 VARCHAR(25), '+
'Zip2 VARCHAR(10), '+
'Country2 VARCHAR(25), '+
'Notes VARCHAR, '+
'EMail1 VARCHAR(100), '+
'EMail2 VARCHAR(100), '+
'EMail3 VARCHAR(100), '+
'EMailType1 INTEGER, '+
'EMailType2 INTEGER, '+
'EMailType3 INTEGER, '+
'Phone1 VARCHAR(25), '+
'Phone2 VARCHAR(25), '+
'Phone3 VARCHAR(25), '+
'Phone4 VARCHAR(25), '+
'Phone5 VARCHAR(25), '+
'PhoneType1 INTEGER, '+
'PhoneType2 INTEGER, '+
'PhoneType3 INTEGER, '+
'PhoneType4 INTEGER, '+
'PhoneType5 INTEGER, '+
'Website1 VARCHAR(100), '+
'Website2 VARCHAR(100), '+
'WebsiteType1 INTEGER, '+
'WebsiteType2 INTEGER, '+
'Category INTEGER, '+
'Custom1 VARCHAR(100), '+
'Custom2 VARCHAR(100),'+
'Custom3 VARCHAR(100), '+
'Custom4 VARCHAR(100) )'
);
ODBCConnection1.ExecuteDirect(
'CREATE UNIQUE INDEX piCRecordID ON Contacts(RecordID) WITH PRIMARY');
ODBCConnection1.ExecuteDirect(
'CREATE INDEX siCResourceID ON Contacts(ResourceID)');
ODBCConnection1.ExecuteDirect(
'CREATE INDEX siCName ON Contacts(LastName, FirstName)' );
ODBCConnection1.ExecuteDirect(
'CREATE INDEX siCCompany ON Contacts(Company)');
end;
procedure TForm1.CreateEventsTable;
begin
ODBCConnection1.ExecuteDirect(
'CREATE TABLE Events ('+
'RecordID COUNTER, ' +
'ResourceID INTEGER, '+
'StartTime DATETIME, '+
'EndTime DATETIME, '+
'Description VARCHAR(255), '+
'Location VARCHAR(255), '+
'Notes VARCHAR, ' +
'Category INTEGER, '+
'AllDayEvent LOGICAL, '+
'DingPath VARCHAR(255), '+
'AlarmSet LOGICAL, '+
'AlarmAdvance INTEGER, '+
'AlarmAdvanceType INTEGER, '+
'SnoozeTime DATETIME, '+
'RepeatCode INTEGER, '+
'RepeatRangeEnd DATETIME, '+
'CustomInterval INTEGER)'
);
ODBCConnection1.ExecuteDirect(
'CREATE UNIQUE INDEX piERecordID ON Events(RecordID) WITH PRIMARY');
ODBCConnection1.ExecuteDirect(
'CREATE INDEX EResourceID ON Events(ResourceID)');
ODBCConnection1.ExecuteDirect(
'CREATE INDEX EStartTime ON Events(StartTime)');
ODBCConnection1.ExecuteDirect(
'CREATE INDEX EEndTime ON Events(EndTime)');
end;
procedure TForm1.CreateResourceTable;
begin
ODBCConnection1.ExecuteDirect(
'CREATE TABLE Resources ( '+
'ResourceID COUNTER, ' +
'Description VARCHAR(255), '+
'Notes VARCHAR, '+ // 1024 --> -
'ImageIndex INTEGER, '+
'ResourceActive LOGICAL, '+ // BOOL --> LOGICAL
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
ODBCConnection1.ExecuteDirect(
'CREATE UNIQUE INDEX piRResourceID ON Resources(ResourceID) WITH PRIMARY'
);
end;
procedure TForm1.CreateTasksTable;
begin
ODBCConnection1.ExecuteDirect(
'CREATE TABLE Tasks ('+
'RecordID COUNTER, ' +
'ResourceID INTEGER, '+
'Complete LOGICAL, '+
'Description VARCHAR(255), '+
'Details VARCHAR, '+
'CreatedOn DATETIME, '+
'Priority INTEGER, '+
'Category INTEGER, '+
'CompletedOn DATETIME, '+
'DueDate DATETIME)'
);
ODBCConnection1.ExecuteDirect(
'CREATE UNIQUE INDEX piTRecordID ON Tasks(RecordID) WITH PRIMARY'
);
ODBCConnection1.ExecuteDirect(
'CREATE INDEX siTDueDate ON Tasks(DueDate)'
);
ODBCConnection1.ExecuteDirect(
'CREATE INDEX siTCompletedOn ON Tasks(CompletedOn)'
);
end;
// Setting up the database connection and the datastore. Preselect a resource
// in the resource combo.
procedure TForm1.FormCreate(Sender: TObject);
begin
if not FileExists('data.mdb') then begin
MessageDlg('Database file "data.mdb" does not exist. ' + LineEnding +
'Please run "CreateAccessDB" to create an empty Access database file.',
if not FileExists(DB_NAME) then begin
MessageDlg('Database file "' + DB_NAME + '" does not exist. ' + LineEnding +
'Please run "CreateAccessDB" to create an empty Access database file.' + LineEnding +
'Or copy an empty database file, data.mdb or data.accdb, from the '+
'folder "empty_db" to the current directory.',
mtError, [mbOK], 0);
Close;exit;
end;
try
// Connection
{$IFDEF MDB}
ODBCConnection1.Driver := 'Microsoft Access Driver (*.mdb)';
{$ENDIF}
{$IFDEF ACCDB}
ODBCConnection1.Driver := 'Microsoft Access Driver (*.mdb, *.accdb)';
{$ENDIF}
ODBCConnection1.Params.Clear;
ODBCConnection1.Params.Add('DBQ=.\data.mdb');
ODBCConnection1.Params.Add('DBQ=' + DB_NAME);
ODBCConnection1.Connected := true;
ODBCConnection1.KeepConnection := true;
@ -227,5 +398,14 @@ begin
Grid.Columns[i].Width := 100;;
end;
procedure TForm1.VpFlexDataStore1CreateTable(Sender: TObject; TableName: String
);
begin
if TableName = ResourceTableName then CreateResourceTable;
if TableName = ContactsTableName then CreateContactsTable;
if TableName = EventsTableName then CreateEventsTable;
if TableName = TasksTableName then CreateTasksTable;
end;
end.