diff --git a/components/tvplanit/examples/datastores/flex/access/tools/CreateAccessDB.lpi b/components/tvplanit/examples/datastores/flex/access/tools/CreateAccessDB.lpi
index 2d4f4eada..ed7f582fa 100644
--- a/components/tvplanit/examples/datastores/flex/access/tools/CreateAccessDB.lpi
+++ b/components/tvplanit/examples/datastores/flex/access/tools/CreateAccessDB.lpi
@@ -61,6 +61,9 @@
+
+
+
diff --git a/components/tvplanit/examples/datastores/flex/access/tools/camain.lfm b/components/tvplanit/examples/datastores/flex/access/tools/camain.lfm
index a0f33d92d..ada3b2351 100644
--- a/components/tvplanit/examples/datastores/flex/access/tools/camain.lfm
+++ b/components/tvplanit/examples/datastores/flex/access/tools/camain.lfm
@@ -4,12 +4,12 @@ object Form1: TForm1
Top = 171
Width = 400
AutoSize = True
- Caption = 'Access database creator'
+ Caption = 'Access Database Creator'
ClientHeight = 285
ClientWidth = 400
Constraints.MinWidth = 400
+ LCLVersion = '3.99.0.0'
OnCreate = FormCreate
- LCLVersion = '1.9.0.0'
object StatusBar1: TStatusBar
Left = 0
Height = 23
@@ -39,8 +39,8 @@ object Form1: TForm1
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Create DB'
- OnClick = BtnCreateDBClick
TabOrder = 0
+ OnClick = BtnCreateDBClick
end
object BtnClose: TButton
AnchorSideRight.Control = Panel1
@@ -55,8 +55,8 @@ object Form1: TForm1
BorderSpacing.Right = 12
BorderSpacing.Bottom = 8
Caption = 'Close'
- OnClick = BtnCloseClick
TabOrder = 1
+ OnClick = BtnCloseClick
end
object Bevel1: TBevel
Left = 9
@@ -109,9 +109,9 @@ object Form1: TForm1
AnchorSideTop.Side = asrBottom
Left = 16
Height = 19
- Top = 125
- Width = 140
- BorderSpacing.Top = 8
+ Top = 133
+ Width = 138
+ BorderSpacing.Top = 16
BorderSpacing.Bottom = 16
Caption = 'Add VisualPlanIt tables'
Checked = True
@@ -125,7 +125,7 @@ object Form1: TForm1
Left = 16
Height = 62
Top = 55
- Width = 267
+ Width = 305
AutoFill = True
AutoSize = True
BorderSpacing.Top = 16
@@ -139,14 +139,14 @@ object Form1: TForm1
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 42
- ClientWidth = 263
+ ClientWidth = 301
ItemIndex = 0
Items.Strings = (
- '.mdb (Access 97, 2000, 2003), 32 bit only'
- '.accdb (Access 2007+), 32 bit and 64 bit'
+ 'Access 97, 2000, 2003), 32 bit only (*.mdb)'
+ 'Access 2007+, 32 bit and 64 bit (*.mdb, *.accdb)'
)
- OnClick = RgFormatClick
TabOrder = 2
+ OnClick = RgFormatClick
end
end
object ODBCConnection1: TODBCConnection
@@ -154,14 +154,14 @@ object Form1: TForm1
LoginPrompt = False
KeepConnection = False
Transaction = SQLTransaction1
- left = 48
- top = 168
+ Left = 48
+ Top = 168
end
object SQLTransaction1: TSQLTransaction
Active = False
Action = caCommit
Database = ODBCConnection1
- left = 152
- top = 168
+ Left = 152
+ Top = 168
end
end
diff --git a/components/tvplanit/examples/datastores/flex/access/tools/camain.pas b/components/tvplanit/examples/datastores/flex/access/tools/camain.pas
index 9f0cfb97c..c968d560a 100644
--- a/components/tvplanit/examples/datastores/flex/access/tools/camain.pas
+++ b/components/tvplanit/examples/datastores/flex/access/tools/camain.pas
@@ -5,8 +5,9 @@ unit caMain;
interface
uses
- Classes, SysUtils, odbcconn, sqldb, FileUtil, Forms, Controls, Graphics,
- Dialogs, StdCtrls, EditBtn, ComCtrls, ExtCtrls;
+ Classes, SysUtils, FileUtil,
+ Forms, Controls, Graphics, Dialogs, StdCtrls, EditBtn, ComCtrls, ExtCtrls,
+ odbcconn, odbcsqldyn, sqldb;
type
@@ -40,6 +41,8 @@ type
{ public declarations }
end;
+ function Is64Bit: Boolean;
+
var
Form1: TForm1;
@@ -74,6 +77,10 @@ function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;
function SQLInstallerError(iError: integer; pfErrorCode: PInteger;
lpszErrorMsg: string; cbErrorMsgMax: integer; pcbErrorMsg: PInteger): integer; stdcall; external 'odbccp32.dll';
+function Is64Bit: Boolean;
+begin
+ Result := SizeOf(Pointer) = 8;
+end;
{ TForm1 }
@@ -85,8 +92,8 @@ begin
if FileNameEdit.FileName = '' then
exit;
- fn := ChangeFileExt(FilenameEdit.FileName, EXT[RgFormat.ItemIndex]);
- fn := ExpandFileNameUTF8(fn);
+ //fn := ChangeFileExt(FilenameEdit.FileName, EXT[RgFormat.ItemIndex]);
+ fn := ExpandFileNameUTF8(FileNameEdit.FileName);
if FileExistsUTF8(fn) then
DeleteFileUTF8(fn);
@@ -138,7 +145,7 @@ var
dbType: string;
driver: string;
ErrorCode, ResizeErrorMessage: integer;
- ErrorMessage: PChar;
+ ErrorMessage: String = '';
retCode: integer;
L: TStrings;
begin
@@ -163,32 +170,29 @@ begin
end;
end;
- retCode := SQLConfigDataSource(Hwnd(nil), ODBC_ADD_DSN, PChar(driver), PChar(dbType));
- // returns 1 in case of success, 0 in case of failure
- if retCode <> 0 then begin
+ retCode := SQLConfigDataSource(0, ODBC_ADD_DSN, PChar(driver), PChar(dbType));
+ if retCode in [SQL_SUCCESS, SQL_SUCCESS_WITH_INFO] then begin
+ {
if not FileExists(ADatabaseFile) then
AErrorMsg := 'Successful creation reported, but file not found.'
else
+ }
Result := true
end else
begin
ErrorCode := 0;
ResizeErrorMessage := 0;
- // todo: verify how the DLL is called - use pointers?; has not been tested.
- GetMem(ErrorMessage, 512);
+ SetLength(ErrorMessage, SQL_MAX_MESSAGE_LENGTH);
+ SQLInstallerError(1, @ErrorCode, PChar(ErrorMessage), Length(ErrorMessage), @ResizeErrorMessage);
+ SetLength(ErrorMessage, ResizeErrorMessage);
+ L := TStringList.Create;
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;
+ L.Delimiter := ';';
+ L.StrictDelimiter := true;
+ L.DelimitedText := ErrorMessage;
+ AErrorMsg := L.Text;
finally
- FreeMem(ErrorMessage);
+ L.Free;
end;
end;
end;
@@ -201,6 +205,7 @@ begin
'ResourceID INTEGER,' +
'FirstName VARCHAR(50) ,'+
'LastName VARCHAR(50) , '+
+ 'Category INTEGER, '+
'Birthdate DATE, '+
'Anniversary DATE, '+
'Title VARCHAR(50), '+
@@ -240,11 +245,20 @@ begin
'Website2 VARCHAR(100), '+
'WebsiteType1 INTEGER, '+
'WebsiteType2 INTEGER, '+
- 'Category INTEGER, '+
'Custom1 VARCHAR(100), '+
'Custom2 VARCHAR(100),'+
'Custom3 VARCHAR(100), '+
- 'Custom4 VARCHAR(100) )'
+ 'Custom4 VARCHAR(100), '+
+ '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 piCRecordID ON Contacts(RecordID) WITH PRIMARY');
@@ -277,7 +291,17 @@ begin
'SnoozeTime DATETIME, '+
'RepeatCode INTEGER, '+
'RepeatRangeEnd DATETIME, '+
- 'CustomInterval INTEGER)'
+ 'CustomInterval INTEGER, '+
+ '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 piERecordID ON Events(RecordID) WITH PRIMARY');
@@ -330,7 +354,17 @@ begin
'Priority INTEGER, '+
'Category INTEGER, '+
'CompletedOn DATETIME, '+
- 'DueDate DATETIME)'
+ 'DueDate DATETIME, '+
+ '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 piTRecordID ON Tasks(RecordID) WITH PRIMARY'
@@ -347,10 +381,22 @@ end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FilenameEdit.ButtonWidth := FilenameEdit.Height;
+
+ if Is64Bit then
+ begin
+ RgFormat.ItemIndex := 1;
+ RgFormat.Controls[0].Enabled := false;
+ end;
end;
procedure TForm1.RgFormatClick(Sender: TObject);
begin
+ if Is64Bit and (RgFormat.itemIndex = 0) then
+ begin
+ RgFormat.ItemIndex := 1;
+ MessageDlg('Access-97 format not supported by 64-bit application.', mtError, [mbOk], 0);
+ end;
+
if FilenameEdit.Filename <> '' then
FilenameEdit.FileName := ChangeFileExt(FileNameEdit.FileName, EXT[RgFormat.ItemIndex]);
end;
diff --git a/components/tvplanit/examples/datastores/flex/access/unit1.pas b/components/tvplanit/examples/datastores/flex/access/unit1.pas
index 6d308cfc0..c230c966c 100644
--- a/components/tvplanit/examples/datastores/flex/access/unit1.pas
+++ b/components/tvplanit/examples/datastores/flex/access/unit1.pas
@@ -3,8 +3,8 @@ unit Unit1;
{$mode objfpc}{$H+}
// Select one of these
-{$DEFINE MDB}
-{.$DEFINE ACCDB}
+{.$DEFINE MDB}
+{$DEFINE ACCDB}
interface
diff --git a/components/tvplanit/languages/vpsr.de.po b/components/tvplanit/languages/vpsr.de.po
index 974026f2f..a40d6f7ab 100644
--- a/components/tvplanit/languages/vpsr.de.po
+++ b/components/tvplanit/languages/vpsr.de.po
@@ -487,13 +487,16 @@ msgid "Edit shape"
msgstr "Form bearbeiten"
#: vpsr.rselementalreadyexists
-#, object-pascal-format
+#, object-pascal-format,fuzzy
+#| msgid ""
+#| "An element named %s already exists.\n"
+#| "Please use a different name.\n"
msgid ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
"Ein Element mit Namen %s existiert bereits.\n"
-"Bitte einen anderen Namen verwenden."
+"Bitte einen anderen Namen verwenden.\n"
#: vpsr.rselements
msgid "Elements:"
@@ -1172,13 +1175,16 @@ msgid "&Print"
msgstr "&Drucken"
#: vpsr.rsprintformatalreadyexists
-#, object-pascal-format
+#, object-pascal-format,fuzzy
+#| msgid ""
+#| "A print template named %s already exists.\n"
+#| "Please use a different name.\n"
msgid ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
"Eine Druckvorlage mit Namen %s existiert bereits.\n"
-"Bitte einen anderen Namen verwenden."
+"Bitte einen anderen Namen verwenden.\n"
#: vpsr.rsprintformatdesigner
msgid "Print template designer"
@@ -1904,3 +1910,4 @@ msgstr "Unbekannte Achsen-Spezifikation: %s"
#: vpsr.sxmldecnotatbeg
msgid "The XML declaration must appear before the first element"
msgstr "Die XML-Deklaration muss vor dem ersten Element erscheinen"
+
diff --git a/components/tvplanit/languages/vpsr.en.po b/components/tvplanit/languages/vpsr.en.po
index 36d3dd525..3c07b955f 100644
--- a/components/tvplanit/languages/vpsr.en.po
+++ b/components/tvplanit/languages/vpsr.en.po
@@ -482,13 +482,16 @@ msgid "Edit shape"
msgstr "Edit shape"
#: vpsr.rselementalreadyexists
-#, object-pascal-format
+#, object-pascal-format,fuzzy
+#| msgid ""
+#| "An element named %s already exists.\n"
+#| "Please use a different name.\n"
msgid ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
#: vpsr.rselements
msgid "Elements:"
@@ -1159,13 +1162,16 @@ msgid "&Print"
msgstr "&Print"
#: vpsr.rsprintformatalreadyexists
-#, object-pascal-format
+#, object-pascal-format,fuzzy
+#| msgid ""
+#| "A print template named %s already exists.\n"
+#| "Please use a different name.\n"
msgid ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
#: vpsr.rsprintformatdesigner
msgid "Print template designer"
diff --git a/components/tvplanit/languages/vpsr.fi.po b/components/tvplanit/languages/vpsr.fi.po
index 64006ce26..49cfd9883 100644
--- a/components/tvplanit/languages/vpsr.fi.po
+++ b/components/tvplanit/languages/vpsr.fi.po
@@ -480,7 +480,7 @@ msgstr ""
#, object-pascal-format
msgid ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rselements
@@ -1163,7 +1163,7 @@ msgstr ""
#, object-pascal-format
msgid ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rsprintformatdesigner
diff --git a/components/tvplanit/languages/vpsr.fr.po b/components/tvplanit/languages/vpsr.fr.po
index 8cfd36523..25fd6197a 100644
--- a/components/tvplanit/languages/vpsr.fr.po
+++ b/components/tvplanit/languages/vpsr.fr.po
@@ -496,7 +496,7 @@ msgstr ""
#, object-pascal-format
msgid ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rselements
@@ -1179,7 +1179,7 @@ msgstr "&Imprimer"
#, object-pascal-format
msgid ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rsprintformatdesigner
diff --git a/components/tvplanit/languages/vpsr.nl.po b/components/tvplanit/languages/vpsr.nl.po
index d49402ced..2d4497d80 100644
--- a/components/tvplanit/languages/vpsr.nl.po
+++ b/components/tvplanit/languages/vpsr.nl.po
@@ -494,7 +494,7 @@ msgstr ""
#, object-pascal-format
msgid ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rselements
@@ -1177,7 +1177,7 @@ msgstr "&Printen"
#, object-pascal-format
msgid ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rsprintformatdesigner
diff --git a/components/tvplanit/languages/vpsr.pl.po b/components/tvplanit/languages/vpsr.pl.po
index 93fb6427b..2b816f528 100644
--- a/components/tvplanit/languages/vpsr.pl.po
+++ b/components/tvplanit/languages/vpsr.pl.po
@@ -487,10 +487,13 @@ msgid "Edit shape"
msgstr "Edycja kształtu"
#: vpsr.rselementalreadyexists
-#, object-pascal-format
+#, object-pascal-format,fuzzy
+#| msgid ""
+#| "An element named %s already exists.\n"
+#| "Please use a different name.\n"
msgid ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr "Zduplikowany element %s, użyj innej nazwy."
#: vpsr.rselements
@@ -1169,10 +1172,13 @@ msgid "&Print"
msgstr "&Drukuj"
#: vpsr.rsprintformatalreadyexists
-#, object-pascal-format, fuzzy, badformat
+#, object-pascal-format,fuzzy,badformat
+#| msgid ""
+#| "A print template named %s already exists.\n"
+#| "Please use a different name.\n"
msgid ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr "Proszę użyć inną nazwę"
#: vpsr.rsprintformatdesigner
diff --git a/components/tvplanit/languages/vpsr.ru.po b/components/tvplanit/languages/vpsr.ru.po
index fc1facc71..c12059210 100644
--- a/components/tvplanit/languages/vpsr.ru.po
+++ b/components/tvplanit/languages/vpsr.ru.po
@@ -490,7 +490,7 @@ msgstr ""
#, object-pascal-format
msgid ""
"An element named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rselements
@@ -1173,7 +1173,7 @@ msgstr "Печать"
#, object-pascal-format
msgid ""
"A print template named %s already exists.\n"
-"Please use a different name."
+"Please use a different name.\n"
msgstr ""
#: vpsr.rsprintformatdesigner