| 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. 
 
 | 
 |