Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Parameterübergabe (https://www.delphipraxis.net/152692-sql-parameteruebergabe.html)

Daniela.S 2. Jul 2010 07:56

Datenbank: EGAL • Version: EGAL • Zugriff über: SQL

SQL Parameterübergabe
 
Hallo,


ich habe mal eine Frage zur Parameterübergabe bei SQL Abfragen. Habe kein Problem oder dergleichen, es geht mir einfach um den besten Stil.

Vielleicht so
Delphi-Quellcode:
  Query.SQL.Text := 'SELECT * FROM tblTest WHERE (intField1=:pID) AND (strField=:pText)';
  Query.Parameters[0].Value = 1;
  Query.Parameters[1].Value = 'test';
  Query.Open;

oder die Parameter per Namen ansprechen?
Delphi-Quellcode:
  Query.SQL.Text := 'SELECT * FROM tblTest WHERE (intField1=:pID) AND (strField=:pText)';
  Query.Parameters.ParamByName('pID').Value = 1;
  Query.Parameters.ParamByName('pText').Value = 'test';
  Query.Open;

oder jedes Mal Prepared aufrufen
Delphi-Quellcode:
  Query.SQL.Text := 'SELECT * FROM tblTest WHERE (intField1=:pID) AND (strField=:pText)';
  Query.Prepared := True;
  Query.Parameters.ParamByName('pID').Value = 1;
  Query.Parameters.ParamByName('pText').Value = 'test';
  Query.Open;

oder was weiss ich...

Wie handhabt ihr das und womit habt ihr die besten Erfahrungen gemacht? Würde mich einmal generell interessieren...

sx2008 2. Jul 2010 08:15

AW: SQL Parameterübergabe
 
Parameter per Namen anzusprechen ist sicher sauberer als sie über ihren Index anzusprechen.
Dies gilt umso mehr je weiter die SQL-Anweisung von dem Setzen der Parameter entfernt ist.

Der Aufruf von Prepared:=True mach nur dann Sinn, wenn Query.SQL nur einmal definiert wird, aber sehr oft mit wechselnden Parametern aufgerufen wird.
Wenn man jedesmal das Property SQL setzt, dann wirkt Prepared:=True eher bremsend auf die Ausführungsgeschwindigkeit.

Mithrandir 2. Jul 2010 08:16

AW: SQL Parameterübergabe
 
Ich nutze eigentlich immer die ParamByName-Methode, wobei sich das "Prepared" ja nur lohnt, wenn man weiß, dass die Abfrage mehrmals hintereinander ausgeführt wird.

schlecki 2. Jul 2010 08:54

AW: SQL Parameterübergabe
 
Zitat:

Zitat von sx2008 (Beitrag 1032988)
Der Aufruf von Prepared:=True mach nur dann Sinn, wenn Query.SQL nur einmal definiert wird, aber sehr oft mit wechselnden Parametern aufgerufen wird.
Wenn man jedesmal das Property SQL setzt, dann wirkt Prepared:=True eher bremsend auf die Ausführungsgeschwindigkeit.

Normalerweise sollte das keinen Unterschied machen, weil das Statement so oder so "prepared" werden muss.

mkinzler 2. Jul 2010 09:00

AW: SQL Parameterübergabe
 
Je nach DBMS besteht da aber ein Unterschied

Mschmidt 4. Jul 2010 18:35

AW: SQL Parameterübergabe
 
Ich würde als Empfehlung auch noch den Datentyp, query.ParamByname('').datatype:=...
setzen. Ich bin bei Oracle mit unterschiedlichem Zeichensatz (Client=Ansi, Server=Unicode) und den TOraComponenten (DevArt)
damit mal ins nirwana gelandet.
MSchmidt


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr.

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