Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit Where-Klausel in einfacher SQL-Abfrage (https://www.delphipraxis.net/142296-problem-mit-where-klausel-einfacher-sql-abfrage.html)

Galaxydriver 25. Okt 2009 19:23

Datenbank: MS-SQL • Version: Express • Zugriff über: ADO

Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Hallo,

ich möchte eine simple Where-Abfrage in SQL machen:

Delphi-Quellcode:
var Vorname, Nachname, User: string;
begin

  User := 'Hans';

  ADOQuery1.Active := False;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.text := 'SELECT * FROM T_User WHERE Vorname like "%' + User + '%" ';
  ADOQuery1.Open;
  ADOQuery1.Active := True;

end;
Eigentlich kein Problem - aber es gibt mit dem User-Parameter ein Problem.

Ich bekomme jedesmal die Fehlermeldung, dass die Spalte 'Hans' nicht existiert.
Irgendwie wird der Suchparameter 'User' als Spaltennamen interpretiert??

Führe ich dagegen eine Abrage auf einen Integer-Wert durch, z. B.

Delphi-Quellcode:
'SELECT * FROM T_User WHERE ID = 1';
Bekomme ich eine korrekte Ausgabe..?

Weiss jemand, woran das liegen könnte?

cu
Chris

mkinzler 25. Okt 2009 19:25

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Verwende einfach Hochkommas

Galaxydriver 25. Okt 2009 19:33

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
meinst Du so:

Delphi-Quellcode:
  ADOQuery1.SQL.text := 'SELECT * FROM T_User WHERE Vorname like " + User + " ';
Das erkennt er wieder nur als Spaltennamen.
Ich steh anscheinend gerade auf'm Schlauch...?

cu
Chris

Galaxydriver 25. Okt 2009 19:44

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Selbst wenn ich den festen Stringwert reinschreibe, kommt der Fehler:

Delphi-Quellcode:
ADOQuery1.SQL.Text := 'SELECT * FROM T_User WHERE Vorname = Hans';
cu
Chris

fkerber 25. Okt 2009 19:48

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Hi!

Ich glaube, es war mehr sowas gemeint:

SQL-Code:
ADOQuery1.SQL.Text := 'SELECT * FROM T_User WHERE Vorname = ''Hans''';

Grüße, Frederic


P.S.
Bitte innerhalb von 24h Beiträge editieren, um neue Infos hinzuzufügen anstatt ein Doppelposting zu machen.

Galaxydriver 25. Okt 2009 19:51

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
super, genau - jetzt funktionierts!!!

Immer diese gemeinen Anführungszeichen in den Strings...

Vielen Dank!!

Bernhard Geyer 25. Okt 2009 19:57

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Zitat:

Zitat von Galaxydriver
Immer diese gemeinen Anführungszeichen in den Strings...

Schau dir lieber auch mal parametrisierte Abfragen an. Ansonsten wird u.U. dein SQL Server per SQL-Injection übernommen.

Neutral General 25. Okt 2009 20:01

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Zitat:

Zitat von Galaxydriver
super, genau - jetzt funktionierts!!!

Immer diese gemeinen Anführungszeichen in den Strings...

Vielen Dank!!

Du kannst übrigens auch die "-Anführungszeichen benutzen ;)

sx2008 25. Okt 2009 20:24

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Zitat:

Zitat von Neutral General
Du kannst übrigens auch die "-Anführungszeichen benutzen ;)

Eigentlich nicht.
Einfache Anführungszeichen verwendet man bei Stringliteralen:
SQL-Code:
... WHERE User='Hans'
Doppelte Anführungszeichen dienen dazu Bezeichner, also Feld- und Tabellennamen, so einzuschliesen:
SQL-Code:
...WHERE "User" = "Feld mit Leerzeichen"
In obiger Where-Bedingung werden also zwei Feldnamen gleichgesetzt.

Manche Datenbanken weichen von dieser SQL/92 (und neuer) - Syntax ab,
was dazu führt, dass sich falsche Meinungen über die Verwendung von einfachen und doppelten Anführungszeichen
hartnäckig halten. :evil:

divBy0 25. Okt 2009 21:42

Re: Problem mit Where-Klausel in einfacher SQL-Abfrage
 
Sollte man da nicht besser mit Parametern arbeiten?

Delphi-Quellcode:
ADOQuery1.SQL.text := 'SELECT * FROM T_User WHERE Vorname like :_Vorname';
ADOQuery1.ParamByName('_Vorname').AsString := 'Hans';


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.
Seite 1 von 2  1 2      

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