Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Interbase Generator Autogenerierung (https://www.delphipraxis.net/2749-interbase-generator-autogenerierung.html)

mschaefer 5. Feb 2003 15:00


Interbase Generator Autogenerierung
 
Moin und Hallo in den Süden

ja die Generatoren verfolgen mich immernoch:
Jetzt geht es um die Einträge der generierten Werte in die Tabelle
Zunächst der Teil der geht :-)

CREATE TABLE adress_basis (
ADR_BAS_PID INTEGER,
ADR_BAS_Titel CHAR(50),
ADR_BAS_NameFull CHAR(50),
ADR_BAS_Company_Job CHAR(50),
ADR_BAS_Street_No CHAR(50),
ADR_BAS_Post_Town CHAR(50),
ADR_BAS_County_State CHAR(50),
ADR_BAS_Info_Person_FNT BLOB,
ADR_BAS_Visualfield_FNT BLOB,
ADR_BAS_Phone CHAR(50),
ADR_BAS_Fax CHAR(50),
ADR_BAS_EMail CHAR(50)
);

CREATE INDEX PRIMARYINDEX ON adress_basis (ADR_BAS_PID);
CREATE GENERATOR adress_basis;


INSERT INTO adress_basis (
ADR_BAS_PID,
ADR_BAS_Titel,
ADR_BAS_NameFull
)
VALUES
(GEN_ID( adress_basis,1)
, 'keiner'
, 'Heinz Becker'
)
;

/* Ok bis hierhin läuft alles bestens, inklusive der automatischen
Generierung des ID-Eintrags. Nun soll man aber mit einer kleinen
Procedure den Ausdruck (GEN_ID( adress_basis,1) im Insert ausdruck
umgehen können, genauer gesagt weglassen und dann ebenfalls
den ersten Value eintrag. Gefunden habe ich folgendes

SET TERM !! ;
CREATE TRIGGER Trigger1 FOR adress_basis
before insert position 0 as
begin
NEW.ADR_BAS_PID = GEN_ID(adress_basis,1);
end !!
SET TERM ; !!

Mein PROBLEM: WIBSQL beschwert sich bei dem SET TERM Ausdruck
und es kommt vom Server eine Fehlermeldung"Token nicht erkannt".
Greife derzeit über ODBC zu.

Habe den Eintrug, dass irgendwo noch ein Schalter umgestellt werden müßte.. Naja da hakt´s halt.

So long // Martin


:coder:

Hansa 5. Feb 2003 17:11

Zitat:

Greife derzeit über ODBC zu.
Habe noch keine Empfehlung gehört, daß das besonders gut ist. :mrgreen:
Aber egal. Hier ist das was bei mir in diesem Zusammenhang in der DB steht :

Code:
CREATE GENERATOR GEN_KUNDE8_ID;
SET GENERATOR GEN_KUNDE8_ID TO 1476;


SET SQL DIALECT 3;
SET NAMES ISO8859_1;

SET TERM ^ ;

CREATE TRIGGER KUNDE8_BI0 FOR KUNDE8
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID (GEN_KUNDE8_ID,1);
end

mschaefer 7. Feb 2003 08:21

Hallo

erstmal Danke für das Codebeispiel, absolut korrekt. Hier kommt nun die Lösung warum mein Code zunächst nicht läuft.

1. Nun ja der ODBC Scheint wohl bestimmte Befehle nicht korrrekt
durchzureichen. Das gilt insbesondere für die SET Befehle.

2. Obwohl ich es in mehreren Interbase Beispielen gesehen habe darf man
offensichtlich bei Firebird mit dem SET TERM Befehl das
Endkennungszeichen nicht auf ein Doppelzeichen (bei mir !!) einstellen.
Mit einem Zeichen geht es dann (SET TERM ! ; und SET TERM ; ! ).

:idea:

Hansa, Dein Beispiel hat übrigens geholfen um doch so einige
mögliche Fehlerquellen auszuschliessen THANKS !

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz