Hi,
folgendes Problem : ich habe eine alte Tabelle, die muß ich in eine Interbase-Table umbauen. Die alte Tabelle hat ein Autoinc-Feld und die neue eine ID, die mit Generator/Trigger hochgezählt wird. Soweit so gut. Ich übernehme die alten AutoInc-Felder als ID und fertig ! Sollte man aber nur meinen. Wegen dubioser Fehler kam ich der Sache erst jetzt auf die Spur: die Autoinc-Felder können so gar nicht übernommen werden, zumindest nicht, sofern irgendwann einmal etwas gelöscht wurde.
In diesem Falle würde der Generatorwert der ID "hinterher" laufen. Soviel zur Problemstellung. Um dies zu umgehen muß ich also den Trigger, den ich später natürlich brauche, deaktivieren und später wieder aktivieren. So ungefähr habe ich es probiert:
Delphi-Quellcode:
DS.SelectSQL.Text := 'ALTER TRIGGER DS_BI0 INACTIVE BEFORE INSERT POSITION 0';
DS.open;
Das scheint so aber nicht zu gehen. Was ist falsch ?
In der
DB steht der Trigger so drin :
SQL-Code:
ALTER TRIGGER DS_BI0
INACTIVE BEFORE INSERT POSITION 0
AS
begin
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID (GEN_DS_ID,1);
end
Muß ich das ganze vielleicht in eine Zeile schreiben ? Beim Setzen des neuen Generatorwertes zum Schluß, weiß ich auch nicht wie.