AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Generatorwert setzen [vorerst erledigt]
Thema durchsuchen
Ansicht
Themen-Optionen

Generatorwert setzen [vorerst erledigt]

Ein Thema von Hansa · begonnen am 2. Dez 2004 · letzter Beitrag vom 2. Dez 2004
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Generatorwert setzen [vorerst erledigt]

  Alt 2. Dez 2004, 10:00
Hi,

hier ist folgendes Problem aufgetaucht : ich muß einmalig (allerdings bei 20 Tabellen) den Generatorwert neu besetzen (auf den höchsten vorhandenen Wert + 1). Hintergrund ist der, daß ich die IDs aus älteren Tabellen 1:1 übernehmen muß. In diesen Fällen schlägt der Trigger, der dafür vorgesehen ist nicht zu, da die ID eben NOT NULL ist.

Mit einer stored Procedure geht das schon, aber dann müßte ich für eine einmalige Aktion 20 SPs anlegen. Ähnlich wäre es, wenn ich die Trigger umbauen würde. Und mit einer einzelnen SP geht das auch nicht, da ich die Table-Namen nicht als Parameter übergeben kann.

Was kann man da noch machen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Generatorwert setzen

  Alt 2. Dez 2004, 10:15
Vielleicht solltest du uns auch noch die verwendetete Datenbank mitteilen.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Generatorwert setzen

  Alt 2. Dez 2004, 10:17
Interbase bzw. Firebird 1.5
Gruß
Hansa
  Mit Zitat antworten Zitat
der-C

Registriert seit: 29. Okt 2004
68 Beiträge
 
Delphi 6 Professional
 
#4

Re: Generatorwert setzen

  Alt 2. Dez 2004, 11:06
wenn du den Wert des alten Generators noch hast:
SET GENERATOR "new_gen" TO GEN_ID("old_gen",1);
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Generatorwert setzen

  Alt 2. Dez 2004, 11:52
Jetzt mal Gemach. So erhalte ich ja die größte ID :

SELECT MAX(ID) FROM TABLE8 und so setze ich ihn neu :

SET GENERATOR "new_gen" TO GEN_ID(MAX(ID),1); Wegen des MAX komme ich auf Feldebene im select aber nicht dran. So wie oben kann ich es im Generator auch nicht benutzen, da ein Generator mit der Table nur indirekt zu tun hat. Die alten IDs sind seltsamerweise nicht sortiert. Aber ich könnte ja immer den höchsten Wert einer Variable zuweisen und zum Schluß dem Generator übergeben ? Hmm, das könnte gehen. Vielleicht fällt jemand noch was besseres ein.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Generatorwert setzen

  Alt 2. Dez 2004, 11:54
GenID(<GeneratorName>, 0) gibt dir die letzte Zahl des entsprechenden Generator zurück, ohne eine neue Zahl zu generieren.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Generatorwert setzen

  Alt 2. Dez 2004, 12:13
Der Tip mit Gen (..,0); ist gut. Werde ich mir merken. Das Problem ist nur : ich habe keinen alten Generator, sondern nur die alten IDs. Die höchste ID ermittele ich aus den alten Daten einfach so :

Delphi-Quellcode:
if ID > maxID then
  maxID := ID;
Somit habe ich am Ende die höchste alte ID in maxID.

Nur das hier geht so nicht :

Delphi-Quellcode:
DS.Close;
DS.SelectSQL.Text := 'SET GENERATOR GEN_TABLE8_ID TO '+IntToStr (MaxID+1);
DS.Open;
DataBase.Commit;
Ich wollte einfach ein Dataset dazu verwenden, den Befehl abzusetzen. Jetzt kommt keine Fehlermeldung. Im SQL-Monitor siegt es so aus :

Zitat von SQL-Monitor:
[Application: konv]
WgDS: [Execute] SET GENERATOR GEN_TABLE8_ID TO 135

Execute tick count 0

[Application: konv]
ReadTransaction: [Commit (Hard commit)](1495)
Der einzige Haken an der Sache ist nur : es geht nicht, Generator bleibt bei 0 stehen.

P.S. : Ich sehe gerade die Zahl hinter dem Commit. Was besagt die ? Im Moment habe ich auch manchmal 1513.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: Generatorwert setzen

  Alt 2. Dez 2004, 12:18
Wie wär's mit DS.SelectSQL.Text := 'SET GENERATOR GEN_TABLE8_ID TO GenID("GEN_TABLE8_ID", '+IntToStr (MaxID+1)+')';
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Generatorwert setzen

  Alt 2. Dez 2004, 12:23
Mann, ihr seid ja schneller als ich. Bei so einem Thema hätte ich das nicht gedacht. Ich habe IBexpert neu gestartet und siehe an, der Wert 135 steht im Generator. @Stevie : das geht schon so, zumindest in IBexpert, wenn man es von Hand eingibt. Also muß es auch in Delphi gehen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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