Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2006
gaby_stars gaby_stars is offline
Miembro
 
Registrado: dic 2005
Posts: 27
Poder: 0
gaby_stars Va por buen camino
Uso de IN en una sentencia SQL

Hola bue día a todos

Estoy tratando de hacer una sentencia SQL agregandole una IN

Código SQL [-]
SELECT us.numero,us.nombre,ad.cveusuario,ad.falta,ad.id_adm,us.id_usu,ad.id_usu
 
FROM administradores ad
LEFT JOIN usuarios us ON (us.id_usu=ad.id_usu) 
WHERE ad.borrado=0 AND us.borrado=0 AND us.id_pza IN (:PARAMENTRO)

De que manera puedo realizar esta sentencia ya que puedo buscar de uno a N datos dentro del IN.

Saludos
Responder Con Cita
  #2  
Antiguo 29-08-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
pues algunos manejadores de bases de datos te dejan hacer algo asi como:
in ('rojo', 'verde', 'azul') y la lista de n elementos
Responder Con Cita
  #3  
Antiguo 29-08-2006
gaby_stars gaby_stars is offline
Miembro
 
Registrado: dic 2005
Posts: 27
Poder: 0
gaby_stars Va por buen camino
Sigo con la duda de hacer un In en una SQL

Gracias por la respuesta luisgutierrezb

Pero mi problema es que al hacer el llamado de esta sentencia SQL en Delphi es donde puede varia la cantida de elementos que quiero localizar, ya que un usuario puede necesitar un solo elemento pero otro puede necesitar mas de uno. Es por eso que no se como manipular esta sentencia.
Responder Con Cita
  #4  
Antiguo 29-08-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
tendrias que construir tu sentencia manualmente, e ir revisando de uno por uno, algo asi como:
if tipo=x then
opciones := opciones + 'x, ';
if tipo=y then
opciones := opciones + 'y, ';
etc...
Responder Con Cita
  #5  
Antiguo 29-08-2006
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
Creo que lo que necesitas es que tus usuarios ingresen una o varias palabras para realizar una búsqueda, sí así es te paso un trozo de código PHP que con un par de cambios te puede servir en Delphi.

Código PHP:
if ( $scan!="" ) {
   
$scan   StrToUpper$scan );
   
$ascan  split" ",$scan );
   for (
$i 0$i count($ascan); $i++) {
      if (
$i==0) {
         
$sql_scan      "SELECT * FROM articulos where (referencia like '%".$ascan[0]."%' or denominacion like '%".$ascan[0]."%' )";
         
$result_scan   db_query$sql_scan );
         while ( 
$row_scan mysql_fetch_array$result_scan ) ) {
            
$codigos[]  = $row_scan["articulos_id"];
            
$encontrado true;
         }
         if ( 
$encontrado ) {
            
$codigos implode(",",$codigos );
            
$sql_scan .= " AND articulos_id IN ( $codigos ) ";
         }
      }
      if (
$i!=0) {  // else {
         
$sql_scan .= " AND (referencia like '%$ascan[$i]%' or denominacion like '%$ascan[$i]%' )";
      }
   }
   
$SQL $sql_scan;

__________________
Saludos
Emilio
Responder Con Cita
  #6  
Antiguo 29-08-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Yo lo hago de esta forma desde Delphi:

Utilizo un TStringList para almacenar los valores de la consulta; pueden ser una o más cadenas, después construyo la sentencia SQL, en tu caso

Código SQL [-]
SELECT us.numero,us.nombre,ad.cveusuario,ad.falta,ad.id_adm,us.id_usu,ad.id_usu
 
FROM administradores ad
LEFT JOIN usuarios us ON (us.id_usu=ad.id_usu) 
WHERE ad.borrado=0 AND us.borrado=0 AND us.id_pza IN (:PARAMENTRO)

Le envió como parámetro la propiedad Commatext del TStringList que te da el mismo formato que propuso luisgutierrezb anteriormente, es decir, si la lista de cadenas contiene:

Código:
  verde
  azul
  rojo
La propiedad CommaText devuelve 'verde,azul,rojo'


Espero que sea útil.

Saludos
Responder Con Cita
  #7  
Antiguo 30-08-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
el problema es que cada uno de los elementos, si estos son texto, deberían estar entre apóstrofes:

'azul', 'verde', 'rojo'

de esa forma para que puedieran quedar dentro del IN... ya lo había manejado de esamanera, pero ya no tengo delphi aquí.... extraño a delphi , lo que yo hacía era grabarlos entre apóstrofes al StringList... de esa manera al usar el commaText, estos ya aparecían con apóstrofes.


ya que si los pasas como 'azul, verde, rojo' no creoq ue vaya a funcionar.
__________________

Responder Con Cita
  #8  
Antiguo 03-09-2006
FOURIER FOURIER is offline
Miembro
 
Registrado: dic 2005
Posts: 40
Poder: 0
FOURIER Va por buen camino
Espero Te Sirva

YO LO QUE VEO ES QUE COMPARAS UNA VARIABLE CON UN CAMPO, ESA VARIABLE PUEDO TOMAR VARIOS VALORES PERO A FIN DE CUENTAS SOLO COMPARAS UNA VARIABLE CON UN CAMPO EL IN ES 1 A N NO TIENE CASO QUE USES EL IN PUEDES USAR EL SIMBOLO "=" SIN PROBLEMAS


ADOQUERY.SQL.TEXT:='
SELECT us.numero,us.nombre,ad.cveusuario,ad.falta,ad.id_adm,us.id_usu,ad.id_usu FROM administradores adLEFT JOIN usuarios us ON (us.id_usu=ad.id_usu) WHERE ad.borrado=0 AND us.borrado=0 AND us.id_pza = :PARAMENTRO';ADOQUERY.Parameters.ParamValues['PARAMENTRO']:=EDIT1.TEXT;ADOQUERY.OPEN; POR EJEMPLO EN CASO DE QUE EL VALOR QUIERES QUE SE TOME DE UN EDIT O SI NO SIMPLEMENTE O SI NO SIMPLEMENTE CONCATENAS PERO EL IN DEFINITIVAMENTE NO SE USA AHI
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas con Sentencia SQL AGAG4 SQL 4 26-04-2006 03:11:57
Ayuda con sentencia SQL Sick boy SQL 8 29-04-2005 18:02:04
Sentencia SUM geovany SQL 2 29-10-2004 23:52:24
Sin valor en Sentencia AGAG4 SQL 6 21-09-2004 22:19:05
sentencia sql??? empty SQL 3 07-04-2004 11:01:32


La franja horaria es GMT +2. Ahora son las 14:39:51.


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