Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 04.08.11 07:38 
Hi, Delpher,

wo ist denn der Fehler bei folgendem Befehl?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
with QBuecher2 do
  begin
    Close; SQL.Clear;                                                           //, S.Telefon
    SQL.Text := format('SELECT B.Klasse, B.Name, B.Vorname, B.Titel, U.ISBN ' +
                       'FROM "%s" B, "%s" U, ', [TbArtikel.tablename, TbBuchstamm.tablename])+
                       ' where (B.KLASSE like ''5%'' or B.KLASSE like ''6%'' ' +
                       ' or B.KLASSE like ''7%'' or B.KLASSE like ''8%'' ' +
                       ' or B.KLASSE like ''9%'' or B.KLASSE like ''10%'') ' +
                       ' and B.Titel = U.Titel ' +
                       ' and (B.Klasse = A.Klasse) ' +
                       ' order by B.Klasse, B.Name, B.Vorname, B.TITEL, U.ISBN';
    Open;
  end;


Die Fehlermeldung heißt: Ungültiges Schlüsselwort where
Vielen Dank für Hilfe

_________________
ut vires desint, tamen est laudanda voluntas
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 04.08.11 07:42 
wo gehört wohl der Formatstring und wo die parameter hin ??
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    SQL.Text := format('SELECT B.Klasse, B.Name, B.Vorname, B.Titel, U.ISBN ' +
                       'FROM "%s" B, "%s" U, ', +
                       ' where (B.KLASSE like ''5%'' or B.KLASSE like ''6%'' ' +
                       ' or B.KLASSE like ''7%'' or B.KLASSE like ''8%'' ' +
                       ' or B.KLASSE like ''9%'' or B.KLASSE like ''10%'') ' +
                       ' and B.Titel = U.Titel ' +
                       ' and (B.Klasse = A.Klasse) ' +
                       ' order by B.Klasse, B.Name, B.Vorname, B.TITEL, U.ISBN',
                       [TbArtikel.tablename, TbBuchstamm.tablename]);

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 04.08.11 08:29 
Hi, Zumi,

habe ich geändert, (auch das letzte Komma entfernt) nun kommt in der ersten Zeile die Fehlermeldung:

Kein Argument für Format '%''

hast du ne Idee?

_________________
ut vires desint, tamen est laudanda voluntas
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 04.08.11 08:45 
hab ich schon gesehen ... ;)

kommt von deinen 5%, 6% usw. im Sql-Befehl.
Format in Hilfe angucken, dann solltest du sehen, was % im Formatbefehl bedeutet
Dann guckste dir an, was % in einem Sql-Befehl bedeutet.


btw: Da wir nicht zusammen im Sandkasten gespielt haben: Ich nenn mich zumA und nicht zumI, ok?

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 04.08.11 09:34 
hi, Zuma <= ok!

Nun, da komme ich leider so nicht weiter ..

tööööf, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 04.08.11 09:57 
Yum Escapen der %/Yeichen im Format/Befehl einfach die % verdoppeln. Steht aber eindeutig in der Hilfe erkl'rt. Weer also lesen kann, ist klar im Vorteil </(

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.

Für diesen Beitrag haben gedankt: D. Annies
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Do 04.08.11 10:47 
das Komma vor dem where ist zu viel

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit

Für diesen Beitrag haben gedankt: D. Annies
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Do 04.08.11 11:33 
Ich weiß nicht, was am ersten Aufruf falsch sein soll.

Das Format() bezieht sich hier halt nur auf den ersten Teil des Befehlst, aber das sollte kein Problem mit dem WHERE verursachen, schließlich ist es das gleiche wie der folgende Quellcode (leicht umformatiert):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
with QBuecher2 do
  begin
    Close; 
    SQL.Clear;                                                           //, S.Telefon
    SQL.Text := format('SELECT B.Klasse, B.Name, B.Vorname, B.Titel, U.ISBN ' +
                       'FROM "%s" B, "%s" U, ', [TbArtikel.tablename, TbBuchstamm.tablename]);
    SQL.Text := SQL.Text +
                       ' where (B.KLASSE like ''5%'' or B.KLASSE like ''6%'' ' +
                       ' or B.KLASSE like ''7%'' or B.KLASSE like ''8%'' ' +
                       ' or B.KLASSE like ''9%'' or B.KLASSE like ''10%'') ' +
                       ' and B.Titel = U.Titel ' +
                       ' and (B.Klasse = A.Klasse) ' +
                       ' order by B.Klasse, B.Name, B.Vorname, B.TITEL, U.ISBN';
    Open;
  end;


Wann genau kommt denn der Fehler? Wenn du das SQL ausführst (beim Open) oder beim Zuweisen des SQL-Befehls (SQL.Text := ...)?
Schon mal im Debugger vor dem Open den SQL-Befehl angeschaut? Vielleicht ist einer der Tabellennamen leer und daher das SQL falsch formatiert?

-- edit --
Sehe gerade, dass mein Vorposter das Problem bereits gefunden hat. Habe es oben hervorgehoben.

Für diesen Beitrag haben gedankt: D. Annies
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 04.08.11 11:58 
Hi, Benny,
vielen Dank!
Detlef

by the way: aus welcher Hilfe liest du das, beschreib doch mal, wenn es dir nicht zu blöd ist.
Ich würd mich freuen .. :)

_________________
ut vires desint, tamen est laudanda voluntas
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 04.08.11 12:50 
Aus dem Online-Joker.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 05.08.11 07:41 
Noch ein Nachtrag:

der folgende Befehl arbeitet im Prinzip richtig:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
with QBuecher2 do
  begin
    Close; SQL.Clear;                                                           //, S.Telefon
    SQL.Text := format('SELECT B.Klasse, B.Name, B.Vorname, B.Titel, U.ISBN ' +
                       ' FROM "%s" B, "%s" U ' +
                       ' where (B.KLASSE like ''5%%'' or B.KLASSE like ''6%%'' ' +
                       ' or B.KLASSE like ''7%%'' or B.KLASSE like ''8%%'' ' +
                       ' or B.KLASSE like ''9%%'' or B.KLASSE like ''10%%'') ' +
                       ' and (B.Titel = U.Titel) and (B.Klasse like U.Kla) ' +
                       ' order by B.Klasse, B.Name, B.Vorname, B.TITEL, U.ISBN',
                         [TbArtikel.tablename, TbBuchstamm.tablename]);
    Open;
  end;


Man beachte "and (B.Klasse like U.Kla)", die Felder heissen also verschieden.
Es ist aber auch noch so, dass ein Feldeintrag in B.Klasse 8a oder 9c heißen kann,
also eine echte Schulklasse repräsentiert,
aber in der Stammdatei steht an dieser Stelle der Klassenstufenbereich, also z.B. 89,
wenn der Titel für beide Klassen ausleihbar ist.

Ich habe versucht, das durch like, also (B.Klasse like U.Kla) auszudrücken, aber das klappt
(noch) nicht.

Gibt es dafür auch eine Lösung?
Danke

_________________
ut vires desint, tamen est laudanda voluntas
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Fr 05.08.11 09:27 
Gibt es bei deinem Query nicht die Möglichkeit, mit Parametern zu arbeiten?
Da tust du dich um einiges leichter.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
query.sql.text:= 'SELECT feld1, feld2, feld3 FROM tabelle WHERE bedingung1 = :bed1 AND bedingung2 like :bed2';
query.ParamByName('bed1').value:= 'test';
query.ParamByName('bed2').value:= '9%';
query.open;


Hab auch immer so solche Statements wie du gebaut. Mit der Zeit wird das unübersichtlich.
Ich verwende die ZEOS-Komponenten.

Lieben Gruß
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Fr 05.08.11 12:55 
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
Man beachte "and (B.Klasse like U.Kla)", die Felder heissen also verschieden.
Es ist aber auch noch so, dass ein Feldeintrag in B.Klasse 8a oder 9c heißen kann,
also eine echte Schulklasse repräsentiert,
aber in der Stammdatei steht an dieser Stelle der Klassenstufenbereich, also z.B. 89,
wenn der Titel für beide Klassen ausleihbar ist.

Ich habe versucht, das durch like, also (B.Klasse like U.Kla) auszudrücken, aber das klappt
(noch) nicht.

Gibt es dafür auch eine Lösung?
Danke


Dass die Felder unterschiedlich heißen, spielt überhaupt keine Rolle.

Wenn du in der einen Tabelle aber 89101112 drin stehen hast, wird es schwierig. Datenbanktechnisch würde man das anders lösen und zwar über eine Tabelle in der du die Jahrgänge hast, eine Tabelle in der du die Artikel hast und eine Zwischentabelle, die dann klärt welcher Artikel von welchem Jahrgang ausgeliehen werden darf.

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
Tabelle: Jahrgaenge

Stufe
------
    5
    6
    7
    8
    9
   10
   11
   12
   13


Tabelle: Buecher

ISBN10     | Name         
-----------+-----------------------
3826686624 | Delphi für Kids
8791364353 | Delphi für Einsteiger
3898421015 | Delphi 6 für Profis


Tabelle: BuecherZuJahrgang

Stufe | ISBN10
------+------------
    6 | 3826686624 
    7 | 3826686624 
    8 | 3826686624 
    9 | 3826686624 
    9 | 8791364353 
   10 | 8791364353 
   11 | 8791364353 
   11 | 3898421015
   12 | 8791364353
   12 | 3898421015 
   13 | 8791364353
   13 | 3898421015
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 05.08.11 21:21 
Danke, Christoph,
mal sehen, wie ich das umsetze.
Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas