Zitat:
Mehrplatzbetrieb ist kein Problem für Sequenzen, wen GEN_ID() verwendet wird.
So meine ich das nicht. GEN_ID verschafft doch keine Transaktionssteuerng für einen Generator.
Für Mehrplatz wird aber eine vernünftige Transaktionssteuerung gebraucht. Ansonsten fliegt einem bei jeder Gelegenheit die
DB um die Ohren. Was ist denn wenn zwei Benutzer den gleichen Datensatz zur selben Zeit ändern oder löschen wollen ? Mit der richtigen Einstellung der Transaktions-Parameter lässt sich das schnell richtig realisieren. Zur erstbesten Gelegenheit die Transaktionssteuerung völlig unnötig zu umgehen ist meiner Meinung nach aber total falsch. Kann zwar gehen, wird aber ziemlich sicher Ärger bringen. Würde mich auch nicht wundern, wenn das in neueren
FB-Versionen sogar unterbunden wird.
Mir fällt gerade ein, bei der Diskussion mit den fortlaufenden Rechnungsnummern, das warst ja auch Du, Markus, der Generatoren dafür empfohlen hat. War ähnliche Diskussion wie jetzt hier. Es könnte Spocki vielleicht helfen, statt des empfohlenen Generators genügt zumindest mir folgendes (zwar für Rechnungsnr., dürfte sich aber 1:1 übernehmen lassen, string verwenden o.ä.) :
Code:
CREATE TABLE RECNR (
NR INTEGER);
CREATE OR ALTER PROCEDURE RECNR_SP
returns (
recnr integer)
as
declare variable neuerecnr integer;
BEGIN
NEUERECNR = -1;
SELECT NR FROM RECNR INTO :NEUERECNR;
IF (NEUERECNR < 0) THEN BEGIN
INSERT INTO RECNR (NR) VALUES (1);
RECNR = 1;
END
ELSE BEGIN
UPDATE RECNR SET NR = NR + 1;
RECNR = NEUERECNR + 1;
END
SUSPEND;
END^
Kommt ziemlich auf Generator/Trigger raus. In dem Fall hier hat die Tabelle RECNR einen einzigen Datensatz mit der letzten Nr. Mit der SP zähle ich die Nr. immer um 1 hoch und kann sie auch direkt per Delphi verwenden. Im Gegensatz zum Generator kann ich aber auch Rollback usw. machen.