Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Sequence liefert immer gleichen Wert (https://www.delphipraxis.net/180329-sequence-liefert-immer-gleichen-wert.html)

skyobserver 12. Mai 2014 16:34

Datenbank: DB400 • Version: V5R3M0 • Zugriff über: AnyDac v1.12.2

Sequence liefert immer gleichen Wert
 
Hallo,


auf unserer AS400-Datenbank gibt es eine Sequence, welche von mehreren
Programmen angefragt wird - klappt auch alles soweit super...

Ein neues Programm verwendet AnyDac statt BDE für den Datenbankzugriff
und zeigt dabei ein mekrwürdiges Verhalten:

Wenn ich die Sequence zum ersten mal anfrage wird korrekterweise der nächste
Sequence-Wert zurückgegeben. Bei allen folgenden Anfragen wird dann immer
nur noch dieser erste Wert zurückgeliefert - bis ich das Programm schließe
(sprich Datenbankverbindung getrennt)und neu starte - dann bekomme ich
wieder einen korrekten neuen Wert und anschließend immer wieder den gleichen...

Hat jemand eine Idee?

p80286 12. Mai 2014 16:45

AW: Sequence liefert immer gleichen Wert
 
So ganz ohne zu wissen was Du da treibst (Source), eher nicht.
Und warum fragst Du den Wert ab?
im Allgem. wir der ja nur bei einem INSERT genutzt, z.B. um eine ID zu generieren.

Gruß
K-H

skyobserver 13. Mai 2014 08:27

AW: Sequence liefert immer gleichen Wert
 
Üblicherweise erzeugen wir beim INSERT eines Datensatzes Record-IDs in dem
ein Trigger die Sequence abfragt und den zurückgegebenen Wert automatisch
einträgt...

Einige alte Tabellen haben diese automatik noch nicht - dank 24h/7d-Betrieb :wink:
ist die Tabelle auch dauerhaft in Benutzung so das der Trigger noch nicht
nachträglich installiert werden konnte. Einige Programme beziehen daher
über eine Funktion in einem Delphi-Datenmodul die Record-ID über eine
Abfrage der Sequence:
Code:
function TdmEvent.GetEventId: Integer;
begin
  try
    adqryDb2.SQL.Text := 'SELECT NEXT VALUE FOR EVENTID_SEQ FROM SYSIBM.SYSDUMMY1';
    adqryDb2.Open;
    try
      Result := adqryDb2.Fields[0].AsInteger;
    finally
      adqryDb2.Close;
    end;
  except
    Result := -1;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr.

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