Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   sql-satement mit variablen (https://www.delphipraxis.net/122514-sql-satement-mit-variablen.html)

khh 17. Okt 2008 10:47

Datenbank: mysql • Version: 5 • Zugriff über: ZEOS

sql-satement mit variablen
 
hallo zusammen,
ich möchte eine sqlstatement ausführen:
SQLStatement.add('insert into tabelle1 (nutzername, rechnerip )values(:name, :ip) ');

mit festen werten funtioniert das so ( die werte in hochkomma) auch, bei dem Einsatz von Variablen hab ich schon alles Mögliche vom : bis QuotedStr(variable)
versucht,
irgendwo ist immer ein fehler im Statement.:-(


Wie ist die richtige syntax ?

EDIT:
SQLStatement ist eine stringliste die mit:
ZQuery1.SQL := SQLStatement;
an die ZQuery übergeben wird.



Danke Gruss KH

DeddyH 17. Okt 2008 10:54

Re: sql-satement mit variablen
 
Wie sieht die Stringliste denn anschließend inhaltlich aus?

khh 17. Okt 2008 11:04

Re: sql-satement mit variablen
 
Zitat:

Zitat von DeddyH
Wie sieht die Stringliste denn anschließend inhaltlich aus?

so:
INSERT INTO tabelle1 (nutzername, rechnerip) VALUES (:name, :ip);

kann also so nicht funktionieren :-(

nahpets 17. Okt 2008 11:25

Re: sql-satement mit variablen
 
Hallo,

was für ein Typ/Klasse ist sqlstatement?

Prüf mal, ob Deine Componente ein Attribut ParamCheck hat und ob das auf True steht.

Das gibt es zumindest bei TQuery und TAdoQuery.

mkinzler 17. Okt 2008 11:27

Re: sql-satement mit variablen
 
Werden die Parameter auch gesetzt?

khh 17. Okt 2008 11:49

Re: sql-statement mit variablen
 
Zitat:

Zitat von mkinzler
Werden die Parameter auch gesetzt?

ist ne normale stringliste
SQLStatement: TStringlist;

die Query ist ne TZQuery
und paramcheck steht auf true

EDIT:
folgende syntax funktioniert :-(

SQLStatement.add(' Insert into tabelle1 set nutzername =' + QuotedStr(nutzername) );

leider hab ich so halt nur den einen wert :-(

DeddyH 17. Okt 2008 12:06

Re: sql-satement mit variablen
 
Delphi-Quellcode:
Stringlist.Add(Format('INSERT INTO tabelle1 (nutzername, rechnerip) VALUES (%s, %s)',[QuotedStr(name),QuotedStr(ip)]));
So besser? Wieso befüllst Du eigentlich eine Stringliste für die Statements, das hab ich bisher noch nicht ganz verstanden.

nahpets 17. Okt 2008 12:10

Re: sql-satement mit variablen
 
Hallo,

Ist das denn noch richtige SQL-Syntax?
Delphi-Quellcode:
SQLStatement.add(' Insert into tabelle1 set nutzername =' + QuotedStr(nutzername) );
Das müsste dann doch funktionieren:
Delphi-Quellcode:
SQLStatement.add('insert into tabelle1 (nutzername, rechnerip )values(' + QuotedStr(nutzername) + ',' + QuotedStr(ip) + ')');
DeddyH's Variante ist natürlich auch ok.

khh 17. Okt 2008 12:15

Re: sql-satement mit variablen
 
folgendes statement funktioniert:

SQLStatement.add('INSERT INTO tabelle1 ( nutzername, rechnerip ) VALUES ( "test", "testip" )' );
dagegen bringt :


SQLStatement.add('INSERT INTO tabelle1 ( nutzername, rechnerip ) VALUES ( "test", :rechnerip )' );
den Fehler:
colnum rechnerip can no be NULL :-(



wo steckt der Fehler?

DeddyH 17. Okt 2008 12:18

Re: sql-satement mit variablen
 
SQL-Parameter müssen ja auch befüllt werden.
Delphi-Quellcode:
ZQuery1.SQL.Add('INSERT INTO Tabelle1(rechnername, rechnerip) VALUES(:name, :ip');
ZQuery1.ParamByName('name').AsString := 'Heinzchen';
ZQuery1.ParamByName('ip').AsString := '192.168.1.200';

khh 17. Okt 2008 12:20

Re: sql-satement mit variablen
 
Zitat:

Zitat von DeddyH
Delphi-Quellcode:
Stringlist.Add(Format('INSERT INTO tabelle1 (nutzername, rechnerip) VALUES (%s, %s)',[QuotedStr(name),QuotedStr(ip)]));
So besser? Wieso befüllst Du eigentlich eine Stringliste für die Statements, das hab ich bisher noch nicht ganz verstanden.

werd ich nachher ausprobieren.
Die stringliste hab ich verwendet, weil
ZQuery.sql:= 'blabla';
folgende fehlermeldung brachte:
Error: Incompatible type for arg no. 1: Got "Constant String", expected "TStrings"

hab ich da was übersehen ??

nahpets 17. Okt 2008 12:22

Re: sql-satement mit variablen
 
müsste auch
Delphi-Quellcode:
ZQuery.sql.add('blabla')
heißen

und dashier

Delphi-Quellcode:
SQLStatement.add('INSERT INTO tabelle1 ( nutzername, rechnerip ) VALUES ( "test", "rechnerip" )' );
mit :rechnerip steht da ein leerer Parameter und den kann die Datenbank nicht verwerten.

khh 17. Okt 2008 12:23

Re: sql-satement mit variablen
 
Zitat:

Zitat von DeddyH
SQL-Parameter müssen ja auch befüllt werden.
Delphi-Quellcode:
ZQuery1.SQL.Add('INSERT INTO Tabelle1(rechnername, rechnerip) VALUES(:name, :ip');
ZQuery1.ParamByName('name').AsString := 'Heinzchen';
ZQuery1.ParamByName('ip').AsString := '192.168.1.200';

ich denke das ist der Fehler,( teste ich nacher gleich) wobei, weshalb funktioniert dann die syntax:
SQLStatement.add(' Insert into tabelle1 set nutzername =' + QuotedStr(nutzername) );

ohne die parameter zu setzen?

DeddyH 17. Okt 2008 12:24

Re: sql-satement mit variablen
 
Weil Du da ja auch keine SQL-Parameter benutzt.

khh 17. Okt 2008 12:25

Re: sql-satement mit variablen
 
Zitat:

Zitat von nahpets
müsste auch
Delphi-Quellcode:
ZQuery.sql.add('blabla')
heißen

jetzt wo du es sagst ;-)

danke dir

hoika 17. Okt 2008 12:25

Re: sql-satement mit variablen
 
Hallo,

weil du dort keine Parameter benutzt!
Ein Parameter fängt mit : an.


Heiko

khh 17. Okt 2008 12:27

Re: sql-satement mit variablen
 
Zitat:

Zitat von DeddyH
Weil Du da ja auch keine SQL-Parameter benutzt.

mann bin ich blö...


vor lauter wechseln zwischen : und QuotedStr
hab ich das glatt übersehen

ich danke euch
EDIT: funtioniert :roll:

Gruss KH


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz