![]() |
Datenbank: dbase • Zugriff über: SQL
Den Inhalt von 2 Tabelle mit einer Schleife ändern
:wall:
Hallo zusammen, ich möchte 2 Table Datenbänke vergleichen, die den gleiche Index und die gleichen Felder haben. Sollte beim vergleichen ein Feld einen anderen wert haben so soll er den wert der 1 Table Datenbank annehmen. Ich hoffe das jemand einen Tipp für mich hat. Mit freundlichen Grüßen :-D Robby :witch: |
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Na dann lösch doch alle Datensätze aus Tabelle 2 und fülle sie anschliessend wieder mit den Werten aus Tabelle 1.
|
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
In meiner 1 Datenbank habe ich nur ein teil meiner Daten aus der Datenbank 2. :?:
|
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Folgender SQL Befehl ersetzt die Spalten wert1 und wert2 durch die Werte aus Tabelle 1. Voraussetzung sind dabei alledings, dass die Identifizierung eines Record in beiden Tabellen über den gleichen Primary Key ID identifiziert und in Relation gesetzt werden.
SQL-Code:
Was hierbei aber nicht berücksichtigt wird, sind das Hinzufügen von Records aus Table1 die in Table2 noch gar nicht existieren. Da müsste dann anschliessend noch folgender Code ausgeführt werden:
update table2
set wert1=table1.wert1, wert2=table1.wert2 from table2 inner join table1 on table2.ID=table1.ID
SQL-Code:
Ob diese Befehle jetzt allerdings bei DBase klappen weiss ich nicht da ich kein so veraltetes DB System mehr nutze. Probiers einfach mal aus.
insert into table2 Select * from table1 where not(table1.ID in (select ID from table2))
|
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Ich habe mir etwas überlegt aber es Funzelt nicht es ist eine Unendliche Schleife,
was mach ich Verkehrt. :gruebel:
Delphi-Quellcode:
:wall:
while not Data.Querymin.Eof do begin
data.tablelager.FindNearest([Data.querymin.fieldByName('pos')]); data.TableLager.active:=true; data.tableLager.edit; Data.tableLager.fieldByName('stueck').AsInteger := Data.QueryMin.fieldByName('stueck').AsInteger ; data.TableLager.post; Data.QueryMin.next; end; |
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Herzlich willkommen in der Delphi-PRAXiS, robby3.
Das Setzen von Table.Active auf TRUE in deiner Schleife ist falsch, sollte aber ignoriert werden und keine Endlosschleife verursachen. Es entspricht einem Table.Open, welches du aber außerhalb deiner Schleife bestimmt schon gemacht hast, sonst würde FindNearest eine Exception werfen. Um deinen Verdacht auf eine Endlosschleife zu überprüfen kannst du die Kenndaten (Spaltenwert pos) der die Schleife steuernden Query im StatusBar zusammen mit einem Satzzähler ausgeben. Beim bloßen Anschauen deines Codes kann ich aber keine Endlosschleife erkennen. Grüße vom marabu PS: Im Prinzip funktionieren die folgenden SQL statements in LOCALSQL.
SQL-Code:
update lager
set stueck = (select stueck from qmin where lager.pos = qmin.pos) where exists (select pos from qmin where qmin.pos = lager.pos) insert into lager select * from qmin where not exists (select pos from lager where lager.pos = qmin.pos) |
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Hallo und Guten Morgen zusammen. :-D :-D :-D
Ich habe herausgefunden dass der FindNearest der Verursacher der Schleife ist Ich habe deine SQL Anweisung ausprobiert und bekomme die Fehler Meldung „Ungültiger Feldname pos“ Pos soll doch der Index in der Abfrage sein oder ?????? :wall: |
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Den Feldnamen POS habe ich in deinem Code gelesen. In meinen SQL-Statements muss da einfach die Tabellenspalte verwendet werden, die einen Datensatz eindeutig identifizieren kann.
FindNearest() ist bei deiner Art des Zugriffs sicher nicht die beste Wahl. Ich hätte FindKey() benutzt. Grüße vom marabu |
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Ich habe mit den SQL Code von marabu rumgefummelt, aber die Daten werden nur Geändert wenn ich zum Schluss
Delphi-Quellcode:
setze,
Qmin.active:= true ;
aber dann Stürzt das Programm mir folgender Fehlermeldung ab, „ Fehler beim Erstellen des Cursor_Handle“ und die Daten sind Anschließend wenn ich das Programm neu Start, geändert worden. Wenn ich aber den
Delphi-Quellcode:
lösche werden keine Daten verändert und das Programm Stürzt auch nicht ab.??????? :wall:
Qmin.active:= true ;
|
Re: Den Inhalt von 2 Tabelle mit einer Schleife ändern
Hallo Robby,
die SQL-Statements für sich genommen sind in Ordnung. Was du draus machst, kann ich nicht erkennen, wenn du nur eine einzige Zeile aus deinem Code zeigst. Es scheint ja so zu sein, dass du den SQL-Code fehlerfrei ausführen konntest. Wenn die dabei geänderte Tabelle auch in irgendwelchen TQuery- oder TTable-Komponenten verwendet wird, dann musst du für diese Komponenten die Methode Refresh() ausführen, damit die Änderungen sofort sichtbar werden. marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz