Buenas tardes,
Tengo un problema con el operador IN, ya que si me funciona en campos INTEGER, pero no hace lo mismo en campos STRING Ó VARCHAR.
Digamos que poniendo un ejemplo sencillo, dispongo de una Tabla llamada INVENTARIO de libros con tres campos:
EXIST: integer
GENERO: varchar
TITULOS: varchar
Utilizo la siguiente consulta y me da bien el resultado sin problema, me devuelven Generos que tienen 5,3,8 en existencias.
Código SQL
[-]
var
NumExist:string;
Begin
NumExist:='(5,3,8)';
IBQueryInvent.SQL.Clear;
IBQueryInvent.SQL.Add('select * from INVENTARIO where EXIST IN '+ NumExist); // EXIST ES TIPO INTEGER
IBQueryInvent.Open;
end;
En cambio si hago lo mismo con el campo GENERO que es tipo VARCHAR
Código SQL
[-]
var
TipoGen:string;
Begin
TipoGen:='(Comedia,Drama)';
IBQueryInvent.SQL.Clear;
IBQueryInvent.SQL.Add('select * from INVENTARIO where Genero IN '+ TipoGen); // GENERO es tipo VARCHAR
IBQueryInvent.Open;
end;
'
En este caso me da el siguiente error: 'Attemp to execute an unprepared dynamic SQL statement.
En caso de que el formato lo cambiara por:
TipoGen:='(''Comedia,Drama'')'; el error sería 'Conversion error from string 'Comedia,Drama'
En cambio utilizando sólo uno si funciona, pero necesito que sean varios y aleatorios.
TipoGen:='(''Comedia'')'; si funciona
He intentado varias posibilidades, en internet, en este foro y no distinguen entre campo tipo varchar o tipo Integer.