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