Einzelnen Beitrag anzeigen

Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#13

Re: Firebird Generator/Trigger für Autoinc (Verständnis_Prob

  Alt 28. Apr 2009, 17:13
*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....
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat