AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Update einer Datenbanktabelle
Thema durchsuchen
Ansicht
Themen-Optionen

Update einer Datenbanktabelle

Ein Thema von Tommahawk · begonnen am 7. Nov 2006 · letzter Beitrag vom 7. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#1

Update einer Datenbanktabelle

  Alt 7. Nov 2006, 14:19
Datenbank: Interbase • Version: 6.0 • Zugriff über: TIBSQL
Hallo liebe Freunde!

Seit langer Abstinenz melde ich mich nun wieder zurück ... mit einem neuen Problem.

1. Beschreibung:

Ich habe zwei Datenbanktabellen. Datenbanktabelle1 hat ein Feld NR, das der Primärschlüssel ist. Datenbanktabelle2 hat zwei Felder, NR1 und NR2, beide vom Typ INTEGER. Das Feld NR1 ist der Primärschlüssel. Das Feld NR2 ist eindeutig. Die Datenbanktabellen sind mit folgenden Daten gefüllt.

Code:
Datenbanktabelle1      Datenbanktabelle2
NR                    NR1 NR2
1                      1   10
7                      7   4
8                      8   2
9                      9   7
2                      2   1
10                     10  5
4                      4   8
So weit, so gut. Wie man sieht entspricht der Inhalt des Feldes NR der Datenbanktabelle1 dem Inhalt des Feldes NR1 der Datenbanktabelle2.

2. Aufgabe :

Nun soll jeweils der Wert des Feldes NR2 der Datenbanktabelle2 in das Feld NR der Datenbanktabelle1 übertragen werden. Verknüpft werden die beiden Datenbanktabellen über die Felder Datenbanktabelle1.NR und Datenbanktabelle2.NR1. Erwähnenswert ist vielleicht noch, dass die Datenbanktabellen statt der sieben genauso gut 1000000 Datensätze enthalten können.

3. Lösung:

Ich hab keine Ahnung! Eine sinnvolle Lösung habe ich noch nicht gefunden. Wünschenswert wäre eine SQL-Anweisung. Okay, wenn man die Aufgabe mit zwei SQL-Anweisungen lösen kann (SELECT und UPDATE), dann bin ich auch noch zufrieden. Jetzt seid Ihr gefragt.

4. Problem:

Als Schwierigkeit hat sich die Reihenfolge herausgestellt, in der die Datensätze der Datenbanktabelle1 aktualisiert werden.


Und nun macht mir ein paar Vorschläge! Helft mir! Vorab schon einmal vielen Dank.

Thomas a.k.a. Tommahawk
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 14:28
Hi,

ich konnte deinem Post bisher keine konkrete Frage entnehmen. Kannst Du die mal kurz formulieren. Was du hast, konnte man sehen.


Gruß oki

[edit="oki"] Tschuldige, hab erst nach DGL-luke's Post die Frage geschnallt [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 14:31
UPDATE table1 as tbl1, table2 as tbl2 SET tbl1.NR = tbl2.NR2 WHERE tbl1.NR = tbl2.NR1 So in etwa? Aber bitte erst testen
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 14:43
Hallo oki,

Du hast ja Recht. Ich hab keine spezielle Frage gestellt. Mich interessiert ganz einfach, wie andere diese Aufgabe lösen würden.

Aber wenn Du eine spezielle Frage möchtest, dann sollst Du sie auch bekommen.

Wie aktualisiere ich die Werte des Feldes NR der Datenbanktabelle1 mit den Werten des Feldes NR2 der Datenbanktabelle2, ohne eine Fehlermeldung aufgrund doppelter Werte im Primärschlüssel der Datenbanktabelle1 zu erhalten?


Viele Grüße,

Thomas
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 14:45
Hi,

geht das wirklich so? Die beiden Tabellen werden doch über NR und NR1 referenziert. Wenn ich jetzt wie im Bsp. das Feld NR aus Tabelle 1 auf einen neuen Wert setze, dann önnen diese doch zweimal vorkommen und in der nächsten Anweisug für diesen Wert das zweite mal verändert werden.

Bsp.:
erstes Feld alt 1 --------- 1. Feld neu 10
...
sechstes Feld alt 10 gesucht ---------- Feld 1 und 6 gefunden und auf 5 geändert.


oder wie jetzt?

Gruß oki

edit: jupp, und doppelte Werte bei schlüssel dann auch noch!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 15:11
Ok, das stimmt... ich hätte gedacht, die Datenbank marschiert einmal komplett durch und prüft.

Ansosnten sage ich mal: Schlechtes Design
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 15:14
Hallo oki,

aber wenn ich den ersten Wert des Feldes NR der Datenbanktabelle1 von 1 auf 10 ändere, dann erhalte ich doch eine Exception, weil doppelte Werte im Primärschlüssel nicht erlaubt sind.

Hab ich das richtig verstanden, dass ich dann erst den alten Wert 10 in der Datenbanktabelle1 aktualisieren soll? Das geht in diesem Fall gut. Es könnte aber theoretisch sein, dass auch der neue Wert 5 bereits in der Datenbanktabelle1 existiert. Dann stehe ich wieder vor dem gleichen Problem und habe zu diesem Zeitpunkt noch keinen einzigen Wert aktualisiert.


Viele Grüße,

Thomas
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 15:29
Eben,

einen Primärschlüssel zu ändern birgt immer die Gefahr die Eindeutigkeit zu verlieren und damit Dateninkonsistenz zu erzeugen. Leider bin ich nicht der fitteste in SQL, aber ich würde es anders machen.

1. Du behältst die Indizes und verschiebst die restlichen Feldwerte zum neuen Datensatz (alle anderen Feldwerte aus altem Record in neuen Record). Dabei mußt du aber schauen, dass dur dir nicht Werte überschreibst, die noch brauchst. Somit müßtest du absteigend nach Nr2 sortieren und dann die werte aus Datensatz Tabelle 1 mit Nr aus NR1 in Datensatz Tabelle 1 mit Nr aus NR2 Tabelle 2 schreiben. Jo man, ich seh kaum noch durch.

2. Du schreibst eine temp. Tabelle und machst die wenn durch zur Tabelle 1.

Da müßte glaub ich was mit eingebettetem select möglich sein!!!

Primärschlüssel überschreiben würd ich aber lassen.

Gruß oki
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 15:41
Hi,

so wie das oben beschrieben ist, einfach Datenbanktabelle1 löschen und dann neu füllen:
select Nr2 from Datenbanktabelle2 Aber in Datenbanktabelle1 ist sicher noch mehr drin...

Dann würde ich Datenbanktabelle1 in eine temporäre Tabelle kopieren, Datenbanktabelle1 dann leeren und neu füllen:
SQL-Code:
insert into temp select * from Datenbanktabelle1

delete from Datenbanktabelle1

insert into Datenbanktabelle1 (Nr,...)
select Datenbanktabelle2.Nr2, Temp...
from Datenbanktabelle2
join Temp on Temp.Nr=Datenbanktabelle2.Nr1
ist zwar nicht schön, aber das Datenbankdesign auch nicht wirklich...

getippt - nicht getestet

[edit] kein roter kasten?[/edit]
Gruß
Norman
  Mit Zitat antworten Zitat
hoika

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

Re: Update einer Datenbanktabelle

  Alt 7. Nov 2006, 17:23
Hallo,

die Frage ist, soll das im laufenden Betrieb passieren ?
Das wäre eh nicht gut (siehe Primärschlüssel ändern).

Wenn nicht, schmeiss den Primärschlüssel kurz weg
(alter table drop constraint)
mache das Update wie oben gezeigt und füge den Primärschlüssel wieder dazu.
(alter table add constraint)


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:26 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