Ver Mensaje Individual
  #1  
Antiguo 28-07-2024
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 71
Reputación: 10
GINMARMENOR Va por buen camino
Operador IN en campos VARCHAR O STRING

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.
Responder Con Cita