AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme mit SQL-Statement
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit SQL-Statement

Ein Thema von PASST · begonnen am 30. Mai 2007 · letzter Beitrag vom 30. Mai 2007
Antwort Antwort
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

Probleme mit SQL-Statement

  Alt 30. Mai 2007, 13:07
Datenbank: dbase • Version: 3 • Zugriff über: bde
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 13:10
Du hast auch das Update Staement nicht beschränkt, d.h. es ändert alle DS
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 13:17
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 13:28
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'.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 13:33
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)
Markus Kinzler
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 14:22
@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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 14:23
LocalSQL ist halt kein richtiges SQL, verglichen mit aktuellen DBMS.
Markus Kinzler
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 14:30
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!
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 16:57
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
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Probleme mit SQL-Statement

  Alt 30. Mai 2007, 17:22
Danke daddy, genau das ist es, was ich suchte. Gut, dass ich noch nicht mit dem PRogramm in Delphi angefangen habe
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:22 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