AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi IDs schnell abändern
Thema durchsuchen
Ansicht
Themen-Optionen

IDs schnell abändern

Ein Thema von trashcandesign · begonnen am 26. Apr 2007 · letzter Beitrag vom 27. Apr 2007
Antwort Antwort
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

IDs schnell abändern

  Alt 26. Apr 2007, 17:46
Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOSLib
Moin,

ich hab da mal wieder ein kleines Problemchen.

Ich habe eine Tabelle [ID|Text] mit ca. 11000 Datensätzen und muss nun bei jedem Datensatz die ID abändern.
Im Moment gehe ich mit einer while-Schleife durch jeden Datensatz und änder die ID:
Delphi-Quellcode:
[...]
  while not eof do
  begin
    Edit;
      FieldByName('ID').AsInteger := iID;
    Post;
     
    inc(iID);
    Next;
  end;
[...]
Diese Methode dauert aber natürlich viel zu lang.
Gibt es eine Möglichkeit dieses Problem recht schnell und einfach zu lösen?


Gruß
Dirk
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: IDs schnell abändern

  Alt 26. Apr 2007, 17:51
Hallo,

was heisst denn "ändern" ?
+1, -10 ??

Ich würde sowas immer mindestens über ne prepared Query machen.
Da du ZEOS benutzt, istd ie praktischer schon prepared,
wenn du eine parametrisierte Query benutzt.

Delphi-Quellcode:
SQL.Clear;
SQL.Add('Update MyTable Where Id=:Id');
for i:= 1 to 10000 do
begin
  ParamByName('Id').AsInteger:= iBlaBla;
  ExecSQL;
end;
Falls der Update-Algorithmus einfach ist,
könnte man auch ne stored procedure benutzen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#3

Re: IDs schnell abändern

  Alt 26. Apr 2007, 17:59
Mal eher etwas grundsätzliches: ID´s (Primärschlüssel) sollten nicht abgeändert werden, um Referenzen nicht zu zerstören. Ich habe bis jetzt nur einmal Primärschlüssel ändern müssen, das betraf die Zusammenführung/Replikation von Daten zweier Datenbanken. Dem Problem kann man aber auch entgegentreten, indem man unterschiedliche Schlüsselräume für die DBs nutzt...

Cu,
Udontknow
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#4

Re: IDs schnell abändern

  Alt 26. Apr 2007, 18:07
@hoika

Schöner Ansatz, ändert an der Geschwindigkeit aber leider nichts.


@Udontknow

Es geht genau darum, dass ich Teildaten aus einer Datenbank in eine Andere schieben muss, aber eben in der Ziel-DB nicht allse löschen kann, sondern die 11000 Datensätze hinzufügen muss!

In beiden DBs gibt es ständig Daten, die hinzugefügt/gelöscht werden, also ist das mit den Adressräumen auch nicht so einfach.

Bei meinem Problem geht es um einen Ex- bzw. Import.
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#5

Re: IDs schnell abändern

  Alt 26. Apr 2007, 18:10
Wieso? Wie bestimmst du denn eine neue ID? Du solltest so etwas wie einen IDGenerator für die Inserts nutzen.

So hättest du ja nun auch das Problem, daß einmal importierte Daten einen neuen Schlüssel bekommen, und ein Update anstelle eines simplen Inserts unmöglich wird...

Cu,
Udontknow
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: IDs schnell abändern

  Alt 26. Apr 2007, 18:11
Wenn du sie von A nach B kopieren/importieren musst, warum denn vorher die ID ändern und dann erst in Tabelle B einfügen. Das kannst Du doch in einem Ruck machen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: IDs schnell abändern

  Alt 26. Apr 2007, 18:22
Hallo,

das iId hatte ich ja gar nicht gesehen.

Update MyTable Set Id=Id+1000 (z.B.)

Da kann auch noch ein Where dahinter.

Das setzt die Id aller Werte um 1000 hoch.

Tip: Die 1000 kann man auch durch eine andere Zahl ersetzen ...


Heiko
Heiko
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#8

Re: IDs schnell abändern

  Alt 27. Apr 2007, 08:57
Moin,

@hoika
DANKE!
Genau das hatte ich gesucht.
Hat zwar ne Weile gedauert, bis ich das kapiert hab, dachte du willst schon wieder, dass ich das in einer Schleife abarbeite, aber nun funzt es extrem schnell.

Wusste noch nicht, dass ich innerhalb eines SQL-Statements auch Berechnungen durchführen kann.
Ist das SQL-Standard, sodass das auch in Access, MSSQL, Oracle usw. funktioniert?


Und danke für den Tip, das hat mich dann gleich mal vor meiner nächsten Frage bewahrt
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#9

Re: IDs schnell abändern

  Alt 27. Apr 2007, 09:00
Zitat von trashcandesign:
... Ist das SQL-Standard, sodass das auch in Access, MSSQL, Oracle usw. funktioniert? ...
Hai,

das sollte mit jedem SQL-System funktionieren.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  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 21:19 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