| Autor | Beitrag | 
| D. Annies 
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: Sa 19.01.13 09:28 
 
Hi, Delpher,
 Der folgende Befehl ist falsch:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 
 | SQL.Text := format('select distinct WPK1NAME as WPU from "%s" ', [TbSchueler.tablename]) +'union ' +
 format('select WPK2NAME as WPU from "%s" ', [TbSchueler.tablename]) +
 format('where WPK1NAME[1] = '' '' or WPK2NAME[1] = '' '' ');
 |  Wo liegt der Fehler?
 Danke, Detlef_________________ ut vires desint, tamen est laudanda voluntas
 | 
|  | 
| Tilo 
          Beiträge: 1098
 Erhaltene Danke: 13
 
 Win7 geg. WInXP oder sogar Win98
 Rad2007
 
 | 
Verfasst: Sa 19.01.13 10:39 
 
Hallo Detlef
 Tippe mal darauf, das in der mit "hier Fehler" markierten Zeile die Aphostrophe (') zuviel sind und die Zeichenkette vorzeitig geschlossen wird.
 Mögliche Lösungen: Stringbegrenzer escapen oder den zu übergebenen String vorher zusammenbauen und in einer Variablen speichern.
 
 Bitte schreib doch mal was für ein Fehler auftritt. Meckert zu Beispiel schon der Compiler oder bekommst Du falsche Ergebnisse?
 (Funktionierende Glaskugel sind leider Mangelware)
 
 Schönes Wochenende,
 Tilo
 | 
|  | 
| D. Annies  
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: Sa 19.01.13 10:43 
 
Danke, Tilo,
 nun, der Compiler meckert:
 [Fehler] buch.pas(3706): Nicht genügend wirkliche Parameter
 
 Gruß, Detlef
 _________________ ut vires desint, tamen est laudanda voluntas
 | 
|  | 
| Mathematiker 
          Beiträge: 2622
 Erhaltene Danke: 1448
 
 Win 7, 8.1, 10
 Delphi 5, 7, 10.1
 
 | 
Verfasst: Sa 19.01.13 10:46 
 
Hallo,
 der format-Befehl benötigt ein Array der einzufügenden Variablen/Argumente:
 		                       Delphi-Quelltext 
 									| 1:
 | function Format(const Format: string; const Args: array of const): string;					 |  Dein letzter format-Befehl besteht nur aus dem Formatierungssstring, d.h. entweder "format(" weglassen oder das Array ergänzen, z.B.
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 
 | SQL.Text := format('select distinct WPK1NAME as WPU from "%s" ', [TbSchueler.tablename]) +'union ' +
 format('select WPK2NAME as WPU from "%s" ', [TbSchueler.tablename]) +
 format('where WPK1NAME[1] = '' '' or WPK2NAME[1] = '' '' ',[]);
 |  Beste Grüße
 Mathematiker_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
 | 
|  | 
| D. Annies  
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: Sa 19.01.13 10:59 
 
ich habe jetzt:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 
 | SQL.Text := format('select distinct WPK1NAME as WPU from "%s" ', [TbSchueler.tablename]) +'union ' +
 format('select WPK2NAME as WPU from "%s" ', [TbSchueler.tablename]) +
 'where WPK1NAME[1] = ' ' or WPK2NAME[1] = ' ' ');
 |  mit der Fehlermeldung:
 [Fehler] buch.pas(3706): Operator oder Semikolon fehlt_________________ ut vires desint, tamen est laudanda voluntas
 | 
|  | 
| Mathematiker 
          Beiträge: 2622
 Erhaltene Danke: 1448
 
 Win 7, 8.1, 10
 Delphi 5, 7, 10.1
 
 | 
Verfasst: Sa 19.01.13 11:26 
 
Hallo,
 die doppelten ' waren schon richtig. Außerdem ist jetzt eine Klammer zuviel, d.h.
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 
 | SQL.Text := format('select distinct WPK1NAME as WPU from "%s" ', [TbSchueler.tablename]) +'union ' +
 format('select WPK2NAME as WPU from "%s" ', [TbSchueler.tablename]) +
 'where WPK1NAME[1] = '' '' or WPK2NAME[1] = '' '' ';
 |  Beste Grüße
 Mathematiker_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
 | 
|  | 
| D. Annies  
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: Sa 19.01.13 11:34 
 
Danke, aber leider ist die (gleiche) Fehlermeldung noch da    LG, Detlef_________________ ut vires desint, tamen est laudanda voluntas
 | 
|  | 
| Mathematiker 
          Beiträge: 2622
 Erhaltene Danke: 1448
 
 Win 7, 8.1, 10
 Delphi 5, 7, 10.1
 
 | 
Verfasst: Sa 19.01.13 11:48 
 
Hallo,
 	  |  D. Annies hat folgendes geschrieben  : |  	  | ... aber leider ist die (gleiche) Fehlermeldung noch da  | 
 Gib bitte einmal die ganze Prozedur mit der fehlerhaften Zeile an. Irgendwo muss ja der Fehler stecken.
 Beste Grüße
 Mathematiker_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
 | 
|  | 
| D. Annies  
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: Sa 19.01.13 12:45 
 
Look at that:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 
 | procedure TBuchMain.WPUListeerzeugen1Click(Sender: TObject);begin
 with QSchueler2 do
 begin
 Close; SQL.Clear;
 SQL.Text := format('select distinct WPK1NAME as WPU from "%s" ', [TbSchueler.tablename]) +
 'union ' +
 format('select WPK2NAME as WPU from "%s" ', [TbSchueler.tablename]) +
 'where WPK1NAME[1] = ' ' or WPK2NAME[1] = ' ' ';
 Open;
 end;
 fname := concat(label30.caption, 'OUTXLS\' + 'WPU_Liste.xls');
 TeilMengenausgabeSG(QSchueler2);
 end;
 |  LG, Detlef_________________ ut vires desint, tamen est laudanda voluntas
 | 
|  | 
| Mathematiker 
          Beiträge: 2622
 Erhaltene Danke: 1448
 
 Win 7, 8.1, 10
 Delphi 5, 7, 10.1
 
 | 
Verfasst: Sa 19.01.13 14:37 
 
Hallo,
 bei mir wird Folgendes, wie oben schon erwähnt, korrekt übersetzt:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 
 |       SQL.Text := format('select distinct WPK1NAME as WPU from "%s" ', [TbSchueler.tablename]) +'union ' +
 format('select WPK2NAME as WPU from "%s" ', [TbSchueler.tablename]) +
 'where WPK1NAME[1] = '' '' or WPK2NAME[1] = '' '' ';
 |  Mehr kann ich Dir nicht sagen.
 Beste Grüße
 Mathematiker_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
 Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| D. Annies  
          Beiträge: 1843
 
 windows 7
 D6  Enterprise, D7  Pers und TD 2006
 
 | 
Verfasst: Sa 19.01.13 15:59 
 
Jo, jetzt geht es mir auch!!
 War wohl iwi unaufmerksam
 
 Danke
 _________________ ut vires desint, tamen est laudanda voluntas
 | 
|  | 
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Sa 19.01.13 16:51 
 Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Sa 19.01.13 17:02 
 
um z.B. Strings in SQL-Abfragen einzubinden, bietet sich die Funktion
 QuotedStr oder in Multibyte-Zeichensätzen AnsiQoutedStr an. Dann wird das mit den '' nicht mehr so unübersichtlich. 
 Diese beiden Funktionen fügen am Anfang und Ende das Zeichen ' automatisch ein. 
 Nur zur Info.
 Du kannst auch leere Strings damit übergeben:
 		                       Delphi-Quelltext 
 									| 1:
 | ..  + Quotedstr('') + ....					 | _________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Sa 19.01.13 17:08 
 
Das ist aber nur die 2. Wahl, falls aus irgendwelchen Gründen parametrisierte Queries nicht in Frage kommen. Aber immer noch besser, als Strings ungeprüft zu übernehmen (Stichwort SQL-Injection). | 
|  | 
| Gerd Kayser 
          Beiträge: 632
 Erhaltene Danke: 121
 
 Win 7 32-bit
 Delphi 2006/XE
 
 | 
Verfasst: Sa 19.01.13 19:29 
 Für diesen Beitrag haben gedankt: D. Annies
 | 
|  | 
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Sa 19.01.13 20:24 
 
Es ging mir weniger um die Abfrage an sich, sondern um die Verwendung von Parametern. | 
|  |