Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sql Befehle mit Parametern absetzen (https://www.delphipraxis.net/42388-sql-befehle-mit-parametern-absetzen.html)

badrulecracker 18. Mär 2005 08:50

Datenbank: Mysql • Version: 4.0 • Zugriff über: ZeosLib

Sql Befehle mit Parametern absetzen
 
Hi,

ich habe mir nach einigen Schwierigkeiten die Zeos Komponente installieren können. Nun bin ich ganz eifrig dabei, meine Mysql Verbindung zu erstellen.

Bei dem Auslesen aus der Datenbank kommt mir doch leider ein Fehler auf. Ich weiss nicht genau wieso, deshalb hier am besten mal der Quellcode
Delphi-Quellcode:

Userauth.SQL.Clear;
Userauth.SQL.Text := 'SELECT `Benutzername`,`Passwort` FROM `user` WHERE `Benutzername` = '':usr'';';
Userauth.Params.Clear;
Userauth.Params.CreateParam(ftString,'usr', ptInput);
Userauth.ParamByName('usr').AsString := User.Text;

Userauth.ExecSQL;
Egal ob ich :usr in Hochkommata setze, wie hier oder ganz ohne, das Erebnis aus Userauth.sql.text ist immer:

SELECT `Benutzername`,`Passwort` FROM `user` WHERE `Benutzername` = ':usr';

Er übernimmt leider die Eingabe aus User.text nicht. Ich wollte mal fragen, wieso nicht?
Oder gibt es da eine andere möglichkeit solche sachen zu übergeben.
Mit
'WHERE `Benutzername` = '''+User.text+''' funktionniert es leider auch nicht richtig, außerdem finde ich das ein wenig umständlich.

Hat da jemand eine Idee?

Mfg, brc

RavenIV 18. Mär 2005 08:59

Re: Sql Befehle mit Parametern absetzen
 
warum benutzt du die property "SQL" und "Params" gemeinsam?

ich schreibe das ganze SQL-statement immer in Sql.Text:
Delphi-Quellcode:
query.Sql.Text := 'SELECT * FROM tabelle WHERE feld LIKE ''abc'';';
die "Params" hab ich noch nie gebraucht...

gruessle

nieurig 18. Mär 2005 09:00

Re: Sql Befehle mit Parametern absetzen
 
Hi,
ich kenne die ZEOS Bibliothek nicht aber:

1.) Versuchmal im SQL Statement die Hochkomma um den Parameternamen wegzulassen.
2.) Ich denke auch das .Clear und .CreateParam kann weg. Zumindest bei den ADOQuery wird mit dem Setzen des Statements eine neue Parameterliste erzeugt und man kann den Parametern sofort Werte zuweisen.

Viel Erfolg
Niels

@RavenIV: Parameter sind meiner Meinung nach die bessere Lösung. Besonders wenn man auf Datumsfelder zugreift muss man sich nicht selbst um die unterschiedliche Schreibweise kümmern.

RavenIV 18. Mär 2005 09:01

Re: Sql Befehle mit Parametern absetzen
 
hab noch was gefunden:
bist du sicher, dass dein statement funktioniert?
...WHERE feld = ''abc''...

versuch das mal in der SQL-console.

gruessle

alcaeus 18. Mär 2005 09:02

Re: Sql Befehle mit Parametern absetzen
 
So gehts:

Delphi-Quellcode:
Userauth.SQL.Clear;
Userauth.SQL.Text := 'SELECT `Benutzername`,`Passwort` FROM `user` WHERE `Benutzername` = :usr;';
Userauth.ParamByName('usr').AsString := User.Text;
Userauth.ExecSQL;
Das schöne an Params ist, dass du dich nicht um Hochkommata und ähnliches kümmern muss :)

Greetz
alcaeus

badrulecracker 18. Mär 2005 09:13

Re: Sql Befehle mit Parametern absetzen
 
Hi,

@alcaeus:
showmessage(userauth.sql.text);
ergibt:
SELECT `Benutzername`, `Passwort` FROM user WHERE `Benutzername` = :usr;

:(
Eigentlich sollte er mir doch ausgeben:
SELECT `Benutzername`, `Passwort` FROM user WHERE `Benutzername` = das_was_ich_eingegeben_habe;

@nieurig:
Ist es nicht von SQL zwangsweise vorgegeben, dass man den String in Hochkommata schreibt?
Clear und CreateParam kann man weglasse habe ich festgestellt, allerdings macht es leider keinen Unterschied, was das Ergebnis betrifft...:-/

RavenIV 18. Mär 2005 09:17

Re: Sql Befehle mit Parametern absetzen
 
warum schreibst du nicht einfach:
Delphi-Quellcode:
Userauth.SQL.Text := 'SELECT `Benutzername`,`Passwort` FROM `user` WHERE `Benutzername` = ' + User.Text + ';';
ich mach das immer so und es klappt hervorragend.

meiner meinung nach sind die params nur aus der steinzeit übrig geblieben, man benötigt sie nicht mehr.

gruessle

Igotcha 18. Mär 2005 09:26

Re: Sql Befehle mit Parametern absetzen
 
Also ich verstehe das Problem nicht, da schon die "gute" Lösung gezeigt wurde ;-)

Ich mache das immer so:

Delphi-Quellcode:
 MainForm.AIOSZQR0.SQL.Text:='SELECT * FROM sys_user WHERE u_username=:username AND u_password=:password';
    MainForm.AIOSZQR0.ParamByName('username').AsString:=Edit1.Text;
    MainForm.AIOSZQR0.ParamByName('password').AsString:=strPass;
    MainForm.AIOSZQR0.Open;
So kannst du auch 10 Parameter im SQL-Statement haben, ohne über irgendwelche "'" zu stolpern.

Gruß Igotcha

Martoeng 18. Mär 2005 09:30

Re: Sql Befehle mit Parametern absetzen
 
Hi,

also ich mache es immer folgendermaßen:

Delphi-Quellcode:
Userauth.SQL.Text := 'SELECT Benutzername, Passwort FROM user WHERE Benutzername = ' + quotedstr(User.Text);
oder, wenn ich nur nach einem Teilstring suche:

Delphi-Quellcode:
Userauth.SQL.Text := 'SELECT Benutzername, Passwort FROM user WHERE Benutzername LIKE ' + quotedstr('%' + User.Text + '%');
Klappt völlig problemlos!


@Raven:

Zitat:

Userauth.SQL.Text := 'SELECT `Benutzername`,`Passwort` FROM `user` WHERE `Benutzername` = ' + User.Text + ';';
^^Das dürfte nicht klappen, weil sql den Inhalt von User.text so als Feldnamen versteht, oder ?!

MfG

Martoeng

alcaeus 18. Mär 2005 09:34

Re: Sql Befehle mit Parametern absetzen
 
Zitat:

Zitat von Martoeng
^^Das dürfte nicht klappen, weil sql den Inhalt von User.text so als Feldnamen versteht, oder ?!

Genau.

Zitat:

Zitat von badrulecracker
@alcaeus:
showmessage(userauth.sql.text);
ergibt:
SELECT `Benutzername`, `Passwort` FROM user WHERE `Benutzername` = :usr;

Ja klar. Dein SQL sieht so aus. Bei der Ausführung mit ExecSQL werden dann die Parameterwerte eingefügt.
So kannst du z.B. 10000 Records oder einfügen, musst aber nur ein mal das SQL zusammenbauen. Danach musst du nur noch die Parameter setzen :)

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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