![]() |
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:
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
UPDATE tKund
SET i= (SELECT tNeu.i FROM tNeu WHERE (tNeu.nr=tKund.nr) AND (tNeu.i>0)) Warum das denn auf einmal? Gruß Peter |
Re: Probleme mit SQL-Statement
Du hast auch das Update Staement nicht beschränkt, d.h. es ändert alle DS
|
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 |
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'.
|
Re: Probleme mit SQL-Statement
SQL-Code:
(getippt und nicht getestet)
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; |
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. |
Re: Probleme mit SQL-Statement
LocalSQL ist halt kein richtiges SQL, verglichen mit aktuellen DBMS.
|
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! :) |
Re: Probleme mit SQL-Statement
Gibt es im LocalSQL die "Exists"-Klausel? Wenn ja, versuch es doch mal hiermit:
SQL-Code:
Gruß Daddy
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); |
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