Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Den Inhalt von 2 Tabelle mit einer Schleife ändern (https://www.delphipraxis.net/56000-den-inhalt-von-2-tabelle-mit-einer-schleife-aendern.html)

robby3 30. Okt 2005 11:36

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:

Jelly 30. Okt 2005 11:38

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.

robby3 30. Okt 2005 11:53

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. :?:

Jelly 30. Okt 2005 14:57

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:
update table2
set wert1=table1.wert1, wert2=table1.wert2 
from table2 inner join table1 on table2.ID=table1.ID
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:

SQL-Code:
insert into table2  Select * from table1 where not(table1.ID in (select ID from table2))
Ob diese Befehle jetzt allerdings bei DBase klappen weiss ich nicht da ich kein so veraltetes DB System mehr nutze. Probiers einfach mal aus.

robby3 30. Okt 2005 20:37

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:
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;
:wall:

marabu 30. Okt 2005 21:00

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)

robby3 31. Okt 2005 10:45

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:

marabu 31. Okt 2005 13:41

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

robby3 31. Okt 2005 16:23

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:
 Qmin.active:= true ;
setze,
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:
Qmin.active:= true ;
lösche werden keine Daten verändert und das Programm Stürzt auch nicht ab.??????? :wall:

marabu 1. Nov 2005 13:16

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.
Seite 1 von 2  1 2      

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