Ir al contenido


Foto

[RESUELTO] Where CAMPO IN


  • Por favor identifícate para responder
13 respuestas en este tema

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 27 agosto 2010 - 05:13

Saludos amigos,

estoy tratando de hacer esto:



sql
  1. SELECT * FROM mi tabla WHERE CAMPO IN (:tipo)





delphi
  1. MiQuery.Active := False;
  2.   MiQuery.ParambyName('TIPO').AsString := '1,2'
  3. MiQuery.Active := True;



Pero me dice que 1,2 no es un entero valido. 

Si lo hago desde ibexpert tampoco, como puedo realizar esto con parametros?
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 27 agosto 2010 - 05:18

Hola
A ver asi:


delphi
  1. MiQuery.Active := False;
  2. MiQuery.Sql.Text:= 'SELECT * FROM mi tabla WHERE CAMPO IN (:tipo)';
  3. MiQuery.Params[0].Value := '1,2'
  4. MiQuery.Active := True;


Si no camina quitale los parentesis al parametro Tipo a ver.
Saludos
  • 0

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 27 agosto 2010 - 05:24

Hola Eduarcol....

La sentencia SQL la agregas en el componente o por código ?

Saludox ! :)
  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 27 agosto 2010 - 05:31

El problema a primera vista es que estás asignando una cadena de texto a un parámetro de tipo entero.
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 27 agosto 2010 - 05:38

Amigo.... razadi, egostar y tu servidora (después de una mini junta :D) estamos de acuerdo en que lo mejor es que sustituyas la linea de tu sentencia SQL por la cadena construida con tus datos...

Ya sea sobreescribiendo la línea completa o utilizando Format

Saludox ! :)
  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 27 agosto 2010 - 05:42

Hola

Amigo.... razadi, egostar y tu servidora (después de una mini junta :D) estamos de acuerdo en que lo mejor es que sustituyas la linea de tu sentencia SQL por la cadena construida con tus datos...

Ya sea sobreescribiendo la línea completa o utilizando Format

Saludox ! :)

Y traducido significa :
Saludos

  • 0

#7 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 27 agosto 2010 - 05:45

Jejejeje... algo como lo que le sugeriste amigo Caral:



delphi
  1. MiQuery.Active := False;
  2. MiQuery.Sql.Text:= 'SELECT * FROM mi tabla WHERE CAMPO IN (1,2)';
  3. MiQuery.Active := True;



o algo así:



delphi
  1. sSQL := 'SELECT * FROM mi tabla WHERE CAMPO IN (%s)';
  2.  
  3. MiQuery.Active := False;
  4. MiQuery.Sql.Text:= Format(sSQL,['1,2']);
  5. MiQuery.Active := True;




O sea sin parámetros.... (y)

Saludox ! :)
  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 27 agosto 2010 - 05:53

Hola
Bueno ya que estamos en esto de cosas nuevas me intrigan varias cosas:
1-
CAMPO IN (%s)

2-
sSQL :=

3-
Format(sSQL,['1,2']);

1- Estamos de acuerdo en el uso de % pero s ?.
2-sSQL, me suena a que se puede ver el contenido del sql del componente, pero no entiendo.
3-Bien, se formatea, pero vuelvo a lo mismo sSql, de donde salio esto tan raro ?.

Maestra, aqui el novato no entiende. :
Saludos
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 27 agosto 2010 - 07:49

Hola amigo

La función format() permite dar formato a cadenas con comodines que permiten "pasar" datos de tipo entero, decimal, string  a una variable de tipo string, es decir, hace un cast de los datos para convertirlos a string.

Por ejemplo:



delphi
  1. showMessage(format('Esta es una prueba para que %s entienda',['CARAL']));



Esto nos regresa 'Esta es una prueba para que CARAL entienda'



delphi
  1. showMessage(format('Esta es la prueba número %d para que %s entienda',[2,'CARAL']));



Esto nos regresa 'Esta es la prueba número 2 para que CARAL entienda'



delphi
  1. showMessage(format('Esta es la prueba número %d para que %s entienda y su deuda ya asciende a %m Colones',[3,'CARAL',41500.35]));



Esto nos regresa 'Esta es la prueba número 3 para que CARAL entienda y su deuda ya asciende a $41,500.35 Colones'

Ejecutalos en delphi y veras que bonito sale ;)

Salud OS
  • 0

#10 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 27 agosto 2010 - 08:05

Hola
Ves: No cuesta nada ser claro para que un novato capte. *-) (y)
Algo mas que aprendí hoy, gracias amigo. (y)
Saludos
  • 0

#11 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 28 agosto 2010 - 10:57

Lo siento amigo Caral, ayer después de responder salí corriendo de la oficina y hasta hoy he vuelto a conectarme  :embarrassed:....

...sSQL no es nada más ni nada menos que una variable de tipo string que guarda la sentencia, misma que después es modificada por el Format (ya explicado por el buen ego (y)) y posteriormente asignada a la propiedad SQL.Text del Query ;)...

Saludox !... y disculpen la confusión :)
  • 0

#12 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 28 agosto 2010 - 10:59

Saludos.

Eduarcol lo que quieres lograr desgraciadamente no es posible revisa este articulo.

Podrías pensar en armar la sentencia con EXECUTE STAMENT si lo quieres hacer en el mismo Firebird o en Delphi con TQuery.SQL.Add() a razón de los parámetros que tengas a mano.
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.458 mensajes
  • LocationMéxico

Escrito 28 agosto 2010 - 12:05

Efectivamente, es lo que comentaba con Razadi y Fena, no puede pasar como parámetro la lista de valores, Sin ambargo si la cantidad de valores es fija se puede hacer sin problema.



sql
  1. SELECT * FROM consumos
  2. WHERE cargo IN (:uno,:dos)



Y ahora sí, pasar ambos parámetros.



delphi
  1. MiQuery.Active := False;
  2.   MiQuery.ParambyName('UNO').AsInteger := 1;
  3.   MiQuery.ParambyName('DOS').AsInteger := 2;
  4. MiQuery.Active := True;



Si es dinámica pienso que si se podría aunque con algo de código ;)

Salud OS
  • 0

#14 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 28 agosto 2010 - 02:49

Muchas gracias amigos, con el Format estuvo perfecto, son unos genios deberian reunirse mas a menudo jeje
  • 0




IP.Board spam blocked by CleanTalk.