Ver la Versión Completa : Como pasar un parametro a una consulta que usa la clausula IN
coco0001
29-12-2007, 05:10:02
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.
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
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:
select ... from ... where campo in (1,2,3)
que es equivalente a esta otra:
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.
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
Gracias no podia encontrar la forma, a mi me funciono, pase el parametro como un string aparte y todo bien.!!!!
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.