Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como pasar un parametro a una consulta que usa la clausula IN (https://www.clubdelphi.com/foros/showthread.php?t=51787)

coco0001 29-12-2007 05:10:02

Como pasar un parametro a una consulta que usa la clausula IN
 
Tengo una consulta sql de la forma:

select ... from ... where campo in (:parametro)

cargada en un adoquery.

Quiero pasarle el parametro, que es una lista de enteros.

Como hago para asignarle al parametro una lista de enteros, que representarian por ejemplo, identificadores de algo. ??

El parametro podria recibir por ejemplo, 1, 2, 3, luego la consulta ejecutaria

select ... from ... where campo in (1,2,3)

Héctor Randolph 29-12-2007 05:57:05

Hola coco0001

Una forma sencilla es construir una lista de números en un StringList y luego aprovechar la propiedad CommaText para obtener la serie de números separados por comas.

Código Delphi [-]
var
  Lista: TStringList;
  Numeros: String;
begin
  Lista:=TStringList.Create;

  Lista.Add(IntToStr(1));
  Lista.Add(IntToStr(2));
  Lista.Add(IntToStr(3));
  Numeros:=Lista.CommaText;

  AdoQuery1.SQL.Add('select * from tabla where campo in (:parametro)')

  // Aquí envías el parámetro a tu consulta adoquery
  AdoQuery1.Parameters.ParamByName('parametro').AsString:=Numeros;
 .
 .
 .
  Lista.Free;
end;


Saludos

coco0001 29-12-2007 06:13:09

Gracias por la respuesta pero no funciona
 
El hecho de armar la lista de numeros como string y pasarselo al parametro

AdoQuery1.Parameters.ParamByName('parametro').AsString:=Numeros;


de esta manera, lo que hace es que la clausula IN pregunte lo siguiente

campo in '1,2,3'

y esto no sirve ya que campo solo toma los valores individuales 1, 2 o 3, y nunca podria ser '1,2,3' como un solo valor. Se entiende ???

El parametro tendria que ser de algun tipo de arreglo o algo asi para que campo tome 1, 2 o 3.

Espero respuesta y gracias...

Héctor Randolph 29-12-2007 07:01:52

Según lo que entiendo, lo que estamos tratando de hacer es formar esta consulta:

Código SQL [-]
select ... from ... where campo in (1,2,3)

que es equivalente a esta otra:

Código SQL [-]
select ... from ... where campo = 1 or campo = 2 or campo = 3

Si se complica el hecho de usar parámetros, construye directamente la sentencia en un string y ejecutala.

Código Delphi [-]
var
  Lista: TStringList;
  Numeros: String;
begin
  Lista:=TStringList.Create;

  Lista.Add(IntToStr(1));
  Lista.Add(IntToStr(2));
  Lista.Add(IntToStr(3));
  Numeros:=Lista.CommaText;

  AdoQuery1.SQL.Text:='select * from tabla where campo in ('+Numeros+')';
  AdoQuery1.Open;
 .
 .
 .
  Lista.Free;
end;

Saludos

shoulder 26-04-2012 17:45:02

String Parametro String
 
Gracias no podia encontrar la forma, a mi me funciono, pase el parametro como un string aparte y todo bien.!!!!


La franja horaria es GMT +2. Ahora son las 15:58:24.

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