Hallo Bernhard,
Zitat von
Bernhard:
Bei entsprechender Programmierung ist diese Syntax "schnurzpiepegal".
Die ?-Notation hat auf jeden Fall den Nachteil, dass man eine Variable im
SQL-Statement nicht mehrfach referenzieren kann. Außer man übergibt sie auch mehrfach, was ziemlich blöd aussieht.
Außerdem liest es sich einfach schlecht, wenn nur Fragezeichen dort stehen, wo eigentlich Namen sein sollten.
Die Variablenausgabe mit Binding finde ich aber recht nett.
Delphi-Quellcode:
type
TDataRec =
class
id : Integer;
col1 : Integer;
col2 :
String;
col3 : Integer;
col4 : Double;
col5 :
String;
end;
.
.
.
procedure TfrmBindParam.btnStdQueryClick(Sender: TObject);
var
sqlres : TMysqlResult;
bEx: Boolean;
iVar: Integer;
begin
// normale Query ohne Statement und Bind
if sql.Connected
then
begin
csgTest.Clear;
iVar := 1000;
sqlres :=
sql.query('
SELECT * FROM test_table ' +
'
WHERE col3 = ''
' + IntToStr(iVar) + '
''
', True, bEx);
if bEx
then
begin
with sqlres
do
begin
First;
while not Eof
do
begin
di.id := FieldByName('
id').AsInteger;
di.col1 := FieldByName('
col1').AsInteger;
di.col2 := FieldByName('
col2').AsString;
di.col3 := FieldByName('
col3').AsInteger;
di.col4 := FieldByName('
col4').AsDateTime;
di.col5 := FieldByName('
col5').AsString;
csgTest.Add(di);
Next;
end;
Free;
end;
end;
end;
end;
procedure TfrmBindParam.btnBindQueryClick(Sender: TObject);
var
sqlRes : TMysqlResult;
bEx: Boolean;
iVar: Integer;
begin
// Query mit Statement und Bind
if sql.Connected
then
begin
csgTest.Clear;
iVar := 1000;
// Query befüllt das Dateninterface di automatisch.
sqlRes :=
sql.query('
SELECT * FROM test_table ' +
'
WHERE col3 = ?', [iVar], di, True, bEx);
if bEx
then
begin
with sqlres
do
begin
First;
// holt erste Zeile in di
while not Eof
do
begin
csgTest.Add(di);
Next;
// holt nächste Zeile in di
end;
csgTest.List.SaveToFile('
test.txt');
Free;
end;
end;
end;
end;
Ich versuche gerade die :Name-Notation einzubauen, was mal wieder an "array of const" scheitert. Schon schade, dass man auf die Variablennamen nicht zugreifen kann, dann wäre es recht einfach.
Grüße,
Uwe