Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#11

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 26. Jan 2010, 18:55
Zitat von DeddyH:
Those SET TERM statements are only needed if you work from an administration tool like isql or FlameRobin. If you run it from your application code, just send the EXECUTE BLOCK block as a single statement.
ich habe übrigens das ganze bis zum Ende gelesen. Ich habe das vieleicht nur nicht ganz verstanden. Also wenn ich das mit meinen Englischkenntnissen richtig verstehe, bedeutet das folgendes..
SET TERM wird nur in Verbindung mit isql or FlameRobin benötigt. In meiner Delphi Aplication muss ich den EXCECUTE BLOCK als einzelnen Block senden. Entweder habe ich das falsch verstanden oder sonst einen Fehler in meinem Code. Das Create, den Trigger etc. habe ich übrigens alles alleine "DURCH LESEN" realisiert.
Exceptionbehandlung und so muss allerdings noch angepasst werden..
Delphi-Quellcode:
Qry_CreateTableArea.SQL.Text :=
'CREATE GENERATOR GEN_AREA_ID; ';
  Qry_CreateTableArea.ExecSQL;
  DM_PS.ConPSConfig.Commit;
Qry_CreateTableArea.SQL.Text :=
'CREATE TABLE AREA (ID ID_DOM, BEREICH TEXT_DOM)';
  Qry_CreateTableArea.ExecSQL;
  DM_PS.ConPSConfig.Commit;
Qry_CreateTableArea.SQL.Text :=
'ALTER TABLE AREA ADD CONSTRAINT PK_AREA PRIMARY KEY (ID) USING INDEX ID';
  Qry_CreateTableArea.ExecSQL;
  DM_PS.ConPSConfig.Commit;
Qry_CreateTableArea.SQL.Text :=
'CREATE OR ALTER TRIGGER TRI_AREA FOR AREA '+
'ACTIVE BEFORE INSERT POSITION 0 '+
'AS '+
'BEGIN '+
  'IF (NEW.ID IS NULL) THEN '+
    'NEW.ID = GEN_ID(GEN_AREA_ID,1);END';
  Qry_CreateTableArea.ExecSQL;
  DM_PS.ConPSConfig.Commit;

  Qry_CreateTableArea.Close;
  Qry_CreateTableArea.SQL.Text :=
  'INSERT INTO AREA (ID,BEREICH)VALUES(:Id,:Bereich)';
  Qry_CreateTableArea.ParamByName('Id').Value := 1;
  Qry_CreateTableArea.ParamByName('Bereich').Value := 'Verbrauchermarkt';
  Qry_CreateTableArea.ExecSQL;
  DM_PS.ConPSConfig.Commit;
except
  Form1.ServiceMemo.Lines.Add('Fehler beim erstellen von Tabelle Bereiche');
end;
end;
Das mit der Abfrage ob die Tabelle vorhanden ist klappt allerdings nicht.
Delphi-Quellcode:
Qry_CreateTableArea.SQL.Text :=
'SELECT 1 FROM rdb$relations where rdb$relation_name = "AREA"';
Qry_CreateTableArea.Open;
Wie muss ich das mit dieser Anweisung denn verstehen. was und wo befinden sich diese beiden Datenbanken/Tabellen oder so. Wenn ich das richtig verstanden habe, sind diese in meiner DB integriert. Mit dem Befehl...
Con_Info.GetTableNames werden mir diese auch Angezeigt. Aber verstehen tue ich die Funktion nicht und eine Exception bring sie auch. Vieleicht ist ja jemand in der Lage mir das mal zu verdeutlichen.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat