Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ParamByName siempre tiene que ir al final ? (https://www.clubdelphi.com/foros/showthread.php?t=45010)

gluglu 20-06-2007 17:35:31

ParamByName siempre tiene que ir al final ?
 
Hola amigos !

En una sentencia SQL (en mi caso con componente IBX e InterBase 7.5), la lista de parámetros pasados mediante ParamByName siempre tiene que ir al final de la creación de la sentencia SQL ??

Así me funciona :
Código Delphi [-]
with IBDataSet1 do begin
  SelectSQL.Clear;
  SelectSQL.Add('Select * from TABLA1');
  SelectSQL.Add('where CAMPO1 = :Txt1');
  SelectSQL.Add('and CAMPO2 = 0');
  ParamByName('Txt1').Value := 'lo que sea';
  Prepare;
  Open;
end;

Así parece que no :
Código Delphi [-]
with IBDataSet1 do begin
  SelectSQL.Clear;
  SelectSQL.Add('Select * from TABLA1');
  SelectSQL.Add('where CAMPO1 = :Txt1');
  ParamByName('Txt1').Value := 'lo que sea';
  SelectSQL.Add('and CAMPO2 = 0');
  Prepare;
  Open;
end;

Se me ha planteado el asunto porque en este caso voy creando la sentencia SQL de manera dinámica dependiendo de diferentes condiciones, y a cada condición le corresponden unos parámetros concretos.

Saludos a todos ;)

jhonny 20-06-2007 18:49:07

Bueno, la verdad es que yo también he practicado dicha actividad en ciertas ocaciones y me a ido bien, nunca he tenido problemas tecnicos al respecto. Pues lo importante (Técnicamente hablando) es que el parámetro ya exista antes de darle un valor, pero como en nuestro caso ya existe, pues por eso no se queja el compilador, ni nada por el estilo.

gluglu 20-06-2007 18:58:11

Gracias Jhonny por responder.

Pero lo que quiero decir es que a mi no me funciona según la segunda versión que detallo arriba. El compilador no me lanza error, pero la consulta en Interbase no me devuelve los registros que son. Por eso preguntaba.

Al final opté por no utilizar parámetros en dicha consulta y convertir directamente todo lo que necesito a Strings e incluirlos directamente en el texto de la consulta SQL.

Lepe 20-06-2007 21:12:06

Supongo que al acceder a parambyname es cuando hace el parser de la consulta... habría que mirarlo.

Puedes incluir todos los parámetros antes de acceder a parambyname. Una vez construida totalmente la consulta añades los valores:

Existen muchas formas de automatizar ese proceso, el primero que se me viene a la mente:
Código Delphi [-]
type Tparametros = record
    nombre : string;
    Value : Variant;
end

var a: array [0..MaxParametros] of TParametros;

for i:=0 to maxparametros do
begin
  p := query1.parambyname(a[i].nombre);
  if Assigned(p) then 
    p.Value := a[i].Value;
end;

Saludos


La franja horaria es GMT +2. Ahora son las 06:00:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi