Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme mit SQL-Statement (https://www.delphipraxis.net/93016-probleme-mit-sql-statement.html)

PASST 30. Mai 2007 12:07

Datenbank: dbase • Version: 3 • Zugriff über: bde

Probleme mit SQL-Statement
 
Hi NG.
vorab: Es geht mir nicht um Delphi-Code, sondern rein um das SQL-Statement basierend auf dem localSQL, das Borland in der BDE verwendet.

Ich muss in unserer Kundentabelle tKund[nr, i, s, feld3, feld4, ...] die Felder i oder für einige 'nr' ändern. Das Feld tKund.nr ist unique. Zur Sicherheit habe ich eine Backuptabelle tKdns2 angelegt. Die Hilfstabelle tNeu[nr, i, s] enthält für einige 'nr' einen Wert i und/oder s, der in tKund geändert werden muss.

Als UPDATE-Statement habe ich folgendes versucht:
SQL-Code:
UPDATE tKund
SET i=
 (SELECT tNeu.i
 FROM tNeu
 WHERE (tNeu.nr=tKund.nr)
 AND (tNeu.i>0))
Tatsächlich ändert dies auch alle gewünschten Sätze richtig ab. Aber es werden auch alle anderen Sätze geändert, die eigentlich nicht betroffen sein dürften. D.h. es werden auch alle Sätze in tKund geändert, für die gilt: tKund.nr<>tNeu.nr

Warum das denn auf einmal?

Gruß
Peter

mkinzler 30. Mai 2007 12:10

Re: Probleme mit SQL-Statement
 
Du hast auch das Update Staement nicht beschränkt, d.h. es ändert alle DS

DeddyH 30. Mai 2007 12:17

Re: Probleme mit SQL-Statement
 
Du hast keine Bedingung für das Update-Statement angegeben. Versuch es mal so (ungetestet):
SQL-Code:
UPDATE tKund A
SET i=(
  SELECT B.i
  FROM tNeu B
  WHERE B.nr = A.nr
  AND B.i > 0)
WHERE B.i IS NOT NULL

PASST 30. Mai 2007 12:28

Re: Probleme mit SQL-Statement
 
Das klingt logisch. Die Einschränkung WHERE B.i IS NOT NULL funktioniert aber nicht. Die DBoberfläche zeigt mir sofort(!) die übliche, pauschale Fehlermeldung 'Ungültiger Feldname'.

mkinzler 30. Mai 2007 12:33

Re: Probleme mit SQL-Statement
 
SQL-Code:
UPDATE tKund A
SET i=(
  SELECT B.i
  FROM tNeu B
  WHERE B.nr = A.nr
  AND B.i > 0)
WHERE (SELECT B.i
          FROM tNeu B
          WHERE B.nr = A.nr ) > 0;
(getippt und nicht getestet)

PASST 30. Mai 2007 13:22

Re: Probleme mit SQL-Statement
 
@mkinzler
Das sieht schön aus, funktioniert aber leider bei mir nicht. Letztendlich geht die DBoberfläche auf 100% hoch und hängt sich dann nach einiger Zeit auf. Ich habe das ganze auch mit INNER JOIN versucht. Das funktioniert dann aber auch nicht.

Seltsam das ganze.

mkinzler 30. Mai 2007 13:23

Re: Probleme mit SQL-Statement
 
LocalSQL ist halt kein richtiges SQL, verglichen mit aktuellen DBMS.

PASST 30. Mai 2007 13:30

Re: Probleme mit SQL-Statement
 
Das ist mir klar. Ich habe schon früher Einschränkungen durch localSQL feststellen müssen.

Bevor ich jetzt stundenlang versuche ein passendes Statement zu erstellen - wenn es überhaupt geht - werde ich in Delphi ein einfaches Programm schreiben, das die Daten zeilenweise ändert.


Aber sollte jemand eine für localSQL passende Lösung finden, würde ich mich freuen, wenn er oder sie diese mir mitteilt! :)

daddy 30. Mai 2007 15:57

Re: Probleme mit SQL-Statement
 
Gibt es im LocalSQL die "Exists"-Klausel? Wenn ja, versuch es doch mal hiermit:

SQL-Code:
UPDATE tKund A
SET i=(SELECT B.i FROM tNeu B WHERE B.nr = A.nr AND B.i > 0)
WHERE Exists(SELECT * FROM tNeu C WHERE C.nr = A.nr and C.i > 0);
Gruß Daddy

PASST 30. Mai 2007 16:22

Re: Probleme mit SQL-Statement
 
Danke daddy, genau das ist es, was ich suchte. Gut, dass ich noch nicht mit dem PRogramm in Delphi angefangen habe ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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-2025 by Thomas Breitkreuz