*Grübeldigrübel*
Das heißt, vermutlich wäre hier ein
fConnection.Connect mit anschließendem
fConnection.Disconnect vor dem
FireBirdAutoInc-Block angebracht, oder? Wenn dem so ist, dann habe ich immer noch ein Problem. Beim Programmstart prüfe ich, ob die Datenbank bereits existiert. Wenn nicht, soll sie angelegt werden.
Delphi-Quellcode:
function TORPDatabase.Connect(DBUser, DBPassword, DBHostName: string): boolean;
begin
with fConnection do
begin
Protocol := 'firebird-2.0';
ReadOnly := false;
User := DBUser;
Password := Password;
Database := fCompleteDBPath;
HostName := DBHostName;
if not FileExists(fCompleteDBPath) then
CreateEmptyDB;
Connect;
Result := Connected;
end;
end;
procedure TORPDataBase.CreateEmptyDB;
begin
with fConnection do
begin
Properties.Add('CreateNewDatabase=CREATE DATABASE ' + QuotedStr(Database)
+ ' USER ' + QuotedStr(User) + ' PASSWORD ' +
QuotedStr(Password) + ' PAGE_SIZE 4096');
end;
FillDB;
end;
procedure TORPDataBase.FillDB;
begin
DoQuery('CREATE TABLE MEMBERS (ID BIGINT NOT NULL, MEMBER_ID BIGINT,"TYPE" VARCHAR(255), REF BIGINT,"ROLE" VARCHAR(255));');
DoQuery('CREATE TABLE NODES (ID BIGINT NOT NULL, NODE_ID BIGINT, LAT FLOAT, LON FLOAT, TAGS VARCHAR(20000));');
DoQuery('CREATE TABLE RELATIONS (ID BIGINT NOT NULL, RELATION_ID BIGINT, MEMBERS VARCHAR(5000), TAGS VARCHAR(5000));');
DoQuery('CREATE TABLE TAGS (ID BIGINT NOT NULL, "KEY" VARCHAR(255), "VALUE" VARCHAR(255));');
DoQuery('CREATE TABLE WAYS (ID BIGINT NOT NULL, WAY_ID BIGINT, NODES VARCHAR(5000), TAGS VARCHAR(5000));');
fConnection.Connect;
fConnection.Disconnect;
FireBirdAutoInc(fConnection,'NODES','ID');
FireBirdAutoInc(fConnection,'TAGS','ID');
end;
Wenn die Datenbank nicht existiert, dann wird zuerst
CreateEmptyDB() und dann
FillDB() aufgerufen. Springt die Funktion wieder zurück zu
Connect() in
TORPDatabase.Connect(), dann erhalten ich folgende Meldung:
Code:
---------------------------
saxxmltest
---------------------------
SQL Error: I/O error for file "G:\Dokumente und Einstellungen\Ich\Anwendungsdaten\OpenRoutePlanner\
DB\ORP_MAIN.fdb" database or file exists. Error Code: -902. Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements The
SQL: CREATE DATABASE 'G:\Dokumente und Einstellungen\Ich\Anwendungsdaten\OpenRoutePlanner\
DB\ORP_MAIN.fdb' USER 'SYSADMIN' PASSWORD '' PAGE_SIZE 4096;
---------------------------
OK
---------------------------
Als hätte er das CREATE DATABASE Statement noch nicht ausgeführt....