Entwickler-Ecke

Datenbanken - Nochmal: SQL-Befehl wurde nicht korrekt beendet


gamoes - Fr 14.04.06 21:57
Titel: Nochmal: SQL-Befehl wurde nicht korrekt beendet
Auch beim folgenden Quelltext erhalte ich die Meldung SQL-Befehl wurde nicht korrekt beendet und ich verstehe nicht wieso:
**************************************************

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
ora_qry_Re_daten_lesen2.SQL.Text:='SELECT * FROM rechnung, rechdaten, kunden, artikel'
                                     +'WHERE kdnr=r_kdnr'
                                     +'AND renr=rechnr'
                                     +'AND artnr=r_artnr'
                                     +'AND renr='+QuotedStr(lbl_ReNr.Caption);
   ora_qry_Re_daten_lesen2.Execute;
*******************************************************

Nur artnr und r_artnr sind Strings alle anderen nr-Spalten sind Number.

Gruß
Gabi

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


Marco D. - Fr 14.04.06 22:05
Titel: Re: Nochmal: SQL-Befehl wurde nicht korrekt beendet

Quelltext
1:
2:
3:
4:
5:
SELECT * FROM rechnung, rechdaten, kunden, artikel'
                                     +'WHERE
 kdnr=r_kdnr'
                                     +'AND renr=rechnr'
                                     +'AND artnr=r_artnr'
                                     +'AND renr='+QuotedStr(lbl_ReNr.Caption);


Probiere es mal so:

Quelltext
1:
2:
3:
4:
5:
SELECT * FROM rechnung, rechdaten, kunden, artikel '
                                     +'WHERE kdnr=r_kdnr'
                                     +'AND renr=rechnr'
                                     +'AND artnr=''r_artnr'''
                                     +'AND renr='+QuotedStr(lbl_ReNr.Caption);


Blawen - Fr 14.04.06 23:54
Titel: Re: Nochmal: SQL-Befehl wurde nicht korrekt beendet
user profile icongamoes hat folgendes geschrieben:
Auch beim folgenden Quelltext erhalte ich die Meldung SQL-Befehl wurde nicht korrekt beendet und ich verstehe nicht wieso:
**************************************************
ora_qry_Re_daten_lesen2.SQL.Text:='SELECT * FROM rechnung, rechdaten, kunden, artikel'
+'WHERE kdnr=r_kdnr'
+'AND renr=rechnr'
+'AND artnr=r_artnr'
+'AND renr='+QuotedStr(lbl_ReNr.Caption);
ora_qry_Re_daten_lesen2.Execute;
*******************************************************
Nur artnr und r_artnr sind Strings alle anderen nr-Spalten sind Number.

Gruß
Gabi


Machst Du bewusst keine Leerschläge?

Sollte es nicht heissen


Delphi-Quelltext
1:
2:
3:
....
+' AND ....'
....


hansa - Sa 15.04.06 05:14

Heißt das bei Euch echt "Leerschläge" ? :shock: Wieviele Tastaturen braucht dann ein User ca. pro Woche ? :lol: Aber egal. Ob bewußt oder unbewußt. Sowas setzt man mit Add zusammen und fertig. Wer sich solch lange Bezeichner leisten kann, für den ist wohl auch ein SelectSQl.Add anstatt eines SQL.Text und ++ zumutbar.


gamoes - Sa 15.04.06 12:02

Besten Dank für Eure Hilfe. Jetzt klappt es.

Gruß

Gabi


Blawen - Sa 15.04.06 13:45

user profile iconhansa hat folgendes geschrieben:
Heißt das bei Euch echt "Leerschläge" ? :shock: Wieviele Tastaturen braucht dann ein User ca. pro Woche ? :lol:

Klar, wie willst Du es sonst benennen -> Leerzeichen?
Aber der User soll ja auch nicht mit der Tastatur um sich schlagen! - Um die Tastatur hab ich dabei ja keine Angst, die hält ja auch sonst einiges aus! ;-)

Zitat:
Sowas setzt man mit Add zusammen und fertig. Wer sich solch lange Bezeichner leisten kann, für den ist wohl auch ein SelectSQl.Add anstatt eines SQL.Text und ++ zumutbar.
Wenn Du mit einem Datenformular arbeitest und den Querys noch logische Namen vergibst, ist es unter Umständen durchaus übersichtlicher nicht mit add zu arbeiten (insbesondere wenn das ganze noch ausdruckbar sein soll)


hansa - Sa 15.04.06 16:00

Ah ja, Schweizer. Alles klar. :D Guck Dir mal den geposteten Source etwas genauer an. Der ist, so wie er da steht, prädestiniert für Add. Jetzt mal unabhängig von dem dahinterliegenden Sinn :


Delphi-Quelltext
1:
+'AND artnr=r_artnr'                    



Delphi-Quelltext
1:
2:
if CheckBox1.checked then
  SelectSQL.Add ('AND artnr=r_artnr');


Ohne Add wirst Du letzeres nur schwerlich machen können. Auf jeden Fall viel komplizierter und wohl kaum so gut zu lesen, wie die Alternative. Klar kann man auch hingehen und in solchen Fällen das komplette Select mehrmals hinschreiben. Je nach Status der Checkbox u.a. Schon mal SQLMonitor benutzt ? In Verbindung mit einem simplen Memo stehen da die Zeilen schön untereinander. Sollte jetzt trotz allem eine einzige Zeile gebraucht werden. Datenformular ? :shock: Trotz Add kann man immer noch mit SelectSQL.Text das Ganze auch als eine Zeile ausdrucken !


Blawen - Sa 15.04.06 16:42

Zitat:

Delphi-Quelltext
1:
2:
if CheckBox1.checked then
  SelectSQL.Add ('AND artnr=r_artnr');


Ohne Add wirst Du letzeres nur schwerlich machen können. Auf jeden Fall viel komplizierter und wohl kaum so gut zu lesen, wie die Alternative. Klar kann man auch hingehen und in solchen Fällen das komplette Select mehrmals hinschreiben. Je nach Status der Checkbox u.a. Schon mal SQLMonitor benutzt ? In Verbindung mit einem simplen Memo stehen da die Zeilen schön untereinander. Sollte jetzt trotz allem eine einzige Zeile gebraucht werden. Datenformular ?

Problemlos möglich - schlussendlich ist es eher eine Frage des pers. Geschmacks:

Delphi-Quelltext
1:
2:
if CheckBox1.checked then
  SelectSQL.Text := SelectSQL.Text + ' AND artnr=r_artnr';

Wieso muss das Select mehrfach aufgeführt werden? Ob jetzt mit Add oder mit "+" - das Ergebnis ist doch das selbe!

Übersichtlichkeit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
FMD.ZQ_Speich.SQL.Text := 'Insert Into KONTAKTDATEN Set ' +
                          'ANREDE_ID = :Anrede_ID, ' +
                          'TITEL_ID  = :Titel_ID,  ' +
                          'VORNAME   = :Vorname,   ' +
                          'NACHNAME  = :Nachname,  ' +
                          'STRASSE1  = :Strasse1,  ' +
                          ...

Find ich persönlich übersichtlicher als mit Add.

Zitat:
Trotz Add kann man immer noch mit SelectSQL.Text das Ganze auch als eine Zeile ausdrucken !

Bezog sich nicht auf das Ausgeben des Inhalts des Query, sondern auf das Ausdrucken des Quelltextes zwecks Archivierung.