Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi AutoInc Value setzen per SQL (https://www.delphipraxis.net/179605-autoinc-value-setzen-per-sql.html)

haentschman 19. Mär 2014 12:22

Datenbank: NEXUS • Version: 3 • Zugriff über: nx....

AutoInc Value setzen per SQL
 
Hallo alle... 8-)

Ich hätte dann gern mal einen Notfall.

Hintergrund:
Es existiert ein Feld "ID" als AutoInc. Der "Zähler" steht auf 1. (leere Tabelle)
Nun werden per SQL in diese Tabelle Datensätze (Vorgaben) eingetragen incl. der ID. Fragt nicht nach, ist so!
Dabei wird der AutoIncCounter nicht erhöht! Das nächste Append knallt mit einer Key Violation. (ID 1 z.B.)

Die nxTables haben eine Procedure SetAutoIncValue. Damit kann man den nächsten Value per Hand vorbelegen. Dies konnte ich in einem Part so realisieren. Jetzt kommt ein anderer Part bei dem nur SQL möglich ist.

Die Frage:
Wie geht das per SQL? Die Suchergebnisse sind äußerst dürftig. Von Einträgen in den Bugtracker bis zu "Ja es geht, mit Restructure der Tabelle danach"... ohne konkrete Lösungunsansätze.:roll:
Das war am aussichtsreichsten von der Beschreibung: http://www.nexusdb.com/forums/showthread.php?t=16898

Danke für Infos. Ich suche parallel weiter. Der erste der die Lösung hat meldet sich... :thumb:

himitsu 19. Mär 2014 12:29

AW: AutoInc Value setzen per SQL
 
k.A., aber mach einfach mal ein Backup (als SQL-Skript) von der Datenbank oder einer entsprechenden Tabelle.

Da drin steht dann der Befehl, um den Wert wieder zu laden.

haentschman 19. Mär 2014 12:33

AW: AutoInc Value setzen per SQL
 
Danke für deine Idee...:thumb:
... nur gibt das der Enterprise Manager nicht her. Nur Backup in einen anderen DB Alias als Datenbank. :roll:
Wenn ich blind bin, klärt mich auf.

Uwe Raabe 19. Mär 2014 12:36

AW: AutoInc Value setzen per SQL
 
Wo liegt denn genau das Problem: werden die IDs per SQL korrekt eingetragen und du willst nur den AutoInc danach anpassen?

haentschman 19. Mär 2014 12:41

AW: AutoInc Value setzen per SQL
 
Genau. Denn durch das manuelle eintragen des AutoInc wird der Counter nicht erhöht. Ich möchte nach Abschluß der "sagen wir mal Korrekturen" den nächsten AutoInc Wert vorbelegen.

:warn: Wir sprechen nicht über den AutoInc Feldwert eines Datensatzes sondern von dem Wert den die AutoInc Engine für den nächsten AutoInc Wert vorhält.

Uwe Raabe 19. Mär 2014 12:50

AW: AutoInc Value setzen per SQL
 
Und was spricht gegen die Methode SetAutoIncValue? Soweit ich weiß, wird diese Funktionalität nicht in SQL abgebildet.

haentschman 19. Mär 2014 12:54

AW: AutoInc Value setzen per SQL
 
Spricht nichts dagegen. In einem Part des "Updates" konnte ich damit ja arbeiten. Geht auch gut. Jetzt habe ich aber einen Teil bei dem ich nur über SQL zugreifen kann und die gleiche Funktionalität benötige. :(

Uwe Raabe 19. Mär 2014 12:58

AW: AutoInc Value setzen per SQL
 
Die aktuell gültige Grammatik für SQL in NexusDB findest du in nxSQLGrammar.BNF

joachimd 19. Mär 2014 12:59

AW: AutoInc Value setzen per SQL
 
Beim ADS kann man das durch zweimaliges Ändern des Feldtypes erzwingen:
Code:
ALTER TABLE mytable ALTER COLUMN myid myid INTEGER;
ALTER TABLE mytable ALTER COLUMN myid myid AUTOINC;
Evtl geht das bei Dir auch, auch wenn es Zeit kostet.

himitsu 19. Mär 2014 13:02

AW: AutoInc Value setzen per SQL
 
Hab das halt bei einigen Datenbanken mitbekommen, wo man sich ein Backup als SQL ausgeben lassen kann.

pgAdmin, phpMyAdmin usw.

- CREATE TABLE, INSERTs mit den Daten, CREATE TRIGGER und was sonst noch alles nötig ist, um die Datenbank neu einzuspielen.

Zitat:

ALTER TABLE mytable ALTER COLUMN myid myid INTEGER;
ALTER TABLE mytable ALTER COLUMN myid myid AUTOINC;
Er hat ja schon das Feld.
Ihm fehlt nur noch der Wert, welcher beim nächsten Insert genommen wird. (wenn ich das richtig bverstanden hab)

haentschman 19. Mär 2014 13:11

AW: AutoInc Value setzen per SQL
 
Zitat:

Ihm fehlt nur noch der Wert, welcher beim nächsten Insert genommen wird. (wenn ich das richtig bverstanden hab)
Korrekt. Der nächste Wert soll manuell per SQL gesetzt werden. 8-)

jobo 19. Mär 2014 13:16

AW: AutoInc Value setzen per SQL
 
Zitat:

Zitat von joachimd (Beitrag 1252546)
Beim ADS kann man das durch zweimaliges Ändern des Feldtypes erzwingen:
Code:
ALTER TABLE mytable ALTER COLUMN myid myid INTEGER;
ALTER TABLE mytable ALTER COLUMN myid myid AUTOINC;
Evtl geht das bei Dir auch, auch wenn es Zeit kostet.

Ich weiß nicht, wie das bei Nexus ist. Aber DDL Statements führen evtl. implizit zu einem Commit. Sowas würde ich normalerweise nur unter Folter einsetzen. Wenn der ganze Prozess im Client abläuft, kann man ggF. noch ordentlich darauf damit umgehen.

haentschman 19. Mär 2014 13:29

AW: AutoInc Value setzen per SQL
 
Halleluja.... :cheer:

Zitat:

Zitat von joachimd (Beitrag 1252546)
Beim ADS kann man das durch zweimaliges Ändern des Feldtypes erzwingen:
Code:
ALTER TABLE mytable ALTER COLUMN myid myid INTEGER;
ALTER TABLE mytable ALTER COLUMN myid myid AUTOINC;
Evtl geht das bei Dir auch, auch wenn es Zeit kostet.

...funktioniert auch mit NEXUS. Das dieser Tipp im NEXUS Forum nicht auftaucht ist schon seltsam.

Danke an Alle. :thumb:

hoika 20. Mär 2014 04:26

AW: AutoInc Value setzen per SQL
 
Hallo,

es gibt auch GetAutoIncValue und SetAutoIncValue.
Ist aber kein SQL.

https://www.nexusdb.com/support/inde...oincworks2.htm

Heiko

haentschman 20. Mär 2014 07:27

AW: AutoInc Value setzen per SQL
 
Guten Morgen...

:zwinker: Ist mir bekannt gewesen aber gut zu erwähnen im Zusammenhang. Danke.
Mein Problem lag ja darin diese Funktionalität ausschließlich per SQL abzubilden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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