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 17-01-2021
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
Buscar varios Registros mismo Campo.

Buenas tardes,

Necesito extraer de una tabla varios registros por el mismo campo, así dispongo de la tabla PAGARES, donde el campo Primario o principal se llama ENTRADA. En un formulario he filtrado por el Proveedor todos los pagarés que le he hecho, de esos pagarés quiero seleccionar varios los cuales no tienen relación alguna ni fecha, ni número ni vencimiento al azar, en el formulario lo he filtrado por IbQuery y quiero listarlo esos pagarés en un RavReport mediante SQL,

El Código que utilizo es el siguiente:
Código SQL [-]
            close
            sql.clear  
            sql.text:= 'select * from pagares where ENTRADA=' + Quotedstr (Pagare1) + 'and ENTRADA=' + Quotedstr(Pagare2) etc etc.

Cuando los campos son distintos no hay problema pero cuando pertenece al mismo mismo campo me deja listarlos, he intentado varios formas pero no hay manera de todas formas serían pocos registros los que buscaría 5 ó 6.

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 17-01-2021
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Lo que puedes haces es usar la siguiente sintaxis en el where...
Código SQL [-]
Where entrada IN (1, 20,36)
Dentro del paréntesis puedes colocar todos los nume los valores que desees
Espero te ayude...
Responder Con Cita
  #3  
Antiguo 18-01-2021
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
He intentado esto

Código SQL [-]
             close
            sql.clear  
            sql.text:= 'select * from pagares where ENTRADA in' + Quotedstr (Pagare1,pagare2).

Pero no funciona sigue dando error: 'Operator not applicable to this operand type'
Responder Con Cita
  #4  
Antiguo 18-01-2021
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Código SQL [-]
 close
            sql.clear  
            sql.text:= 'Select * From Pagares Where ENTRADA In (' + Quotedstr(Pagare1)+',',Quotedstr(pagare2)+')';.

Debería ser algo así...

Código SQL [-]
Select * From Pagares Where Entrada In ('1','2','...');

Saludos cordiales
Responder Con Cita
  #5  
Antiguo 19-01-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Aparte de lo que ya te respondió cloayza, te recomiendo estudies un poco mas SQL https://www.w3schools.com/sql/default.asp
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #6  
Antiguo 19-01-2021
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
Siempre he usado esta sintaxis que por ejemplo ésta un poco más compleja:

Código SQL [-]
                      With IbQueryParares do   
                      close
                     sql.clear  
                     sql.text:= 'select * from pagares where cliente=' + Quotedstr (EditCliente.text) + 'and fechaPagare between' + Quotedstr (EditFechaInicial.text) + 'and' + Quotedstr (EdifechaFinal.text) + 
                                    'and Banco=' + Quotdstr ('Santander') + 'order by cliente,FechaPagare';

Y siempre me ha funcionado, pero al usar ésta:


Código SQL [-]
            With IbQueryParares do  
            close
            sql.clear  
            sql.text:= 'select * from pagares where ENTRADA in' + Quotedstr (Pagare1,pagare2).

Donde tengo que seleccionar varios pagares de forma puntual sin ninguna relación dentro del mismo campo no me funciona.

Lo que pasa Cloayza es que tengo que morir a las comillas por ejemplo 'select * from....' no puedo hacerlo sin comillas y tambien tengo que morir al Quotedstr no puedo hacerlo sin él seguramente como dice Movorack tengo que estudiar más o la versión de SQL es antigua no sé , pero hasta ahora según esa sintaxis he hecho infinidad de listados de distintos tipos y más complejos y han funcionado a la perfección.

Muchas Gracias.
Responder Con Cita
  #7  
Antiguo 19-01-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola, te dije que debes estudiar un poco mas porque tu inconveniente básicamente es que estas usando el operador incorrecto.

Tienes esta sentencia:

Código SQL [-]
select * from pagares where ENTRADA = '001' and ENTRADA = '002'

Pero esto seleccionará los elementos de la tabla donde ENTRADA sea tanto '001' como '002'. Eso no te devolverá ningún resultado porque estás usando el operador incorrecto.

En este caso, debes usar un OR (SQL AND, OR and NOT Operators https://www.w3schools.com/sql/sql_and_or.asp).

Con el OR obtendrás los registros donde ENTRADA sea '001' ó '002'

Código SQL [-]
select * from pagares where ENTRADA = '001' OR ENTRADA = '002'

Por ello, Cloayza te propone usar el IN (SQL IN Operator https://www.w3schools.com/sql/sql_in.asp)

Cita:
El operador IN es un atajo para múltiples condiciones OR.
Es decir que la ultima sentencia se puede escribir con los OR o el IN y ambas tendrán el mismo resultado.

Código SQL [-]
-- Usando OR
select * from pagares where ENTRADA = '001' OR ENTRADA = '002'

-- Usando IN
select * from pagares where ENTRADA IN ('001', '002')

Ahora. Ten en cuenta como armas esa sentencia SQL desde delphi.
Te recomiendo usar parámetros en lugar de concatenar y si a la final tienes que concatenar, verifica que la sentencia que envías sea la correcta.

En tu último ejemplo te faltan los paréntesis del IN dentro de la sentencia.

Algo así puede quedar tu sentencia:

Código Delphi [-]
  With IbQueryParares do  
  begin
    close; 
    sql.clear;
    sql.text:= Format('select * from pagares where ENTRADA in (%s, %s) ', [Quotedstr(Pagare1), Quotedstr(pagare2)]);
  end;

Nuevamente, mi recomendación es que estudies y practiques mas SQL. No es que no se te quiera ayudar, es que con el aprendizaje y la practica vas a cubrir esos vacíos de conocimiento que tienes.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #8  
Antiguo 20-01-2021
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
Funciona bien, pero sólo busca exactamente los registros que se diseño en la línea de sql, si diseñé 5 en sql busca 5 si elijo buscar 4 me dice que el que falta está "", y si elijo más de 5 solo me selecciona 5 lógicamente.

Miraré como puedo elegir si diseño en sql 5, buscar 1 ó 2 ó 3 ó 4 ó 5 sin que dé error, con los enlaces que me mandaste.

La verdad pero hasta ahora iba muy bien con lo que sabía haciendo infinidad de filtros, listados con sql, la verdad es que es una pasada.

Muchas Gracias, de verdad.
Responder Con Cita
  #9  
Antiguo 21-01-2021
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Si el número de datos es variable tienes que crear esa parte de la consulta con un bucle, así la cláusula 'IN' tendrá tantos elementos como necesites. Y luego debes realizar lo mismo para la carga de los parámetros.
Pero entonces tu problema no es el que planteaste originalmente y tal vez la solución propuesta no sea la más adecuada. Explícalo de nuevo, con detalle.
Responder Con Cita
  #10  
Antiguo 21-01-2021
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
Si, sí es Kuan-yiu, es justo y exactamente la solución que me han han dado tanto Cloayza como movorack, es poder elegir en una tabla unos registros específicos que sólo tienen un campo en común pero son tantos registros que solo tengo que elegir unos cuantos de ellos, así el primer paso los filtro por el campo en común los meto en Dbgrid con un CheckBox al inicio de la fila, y de ésos elijo los que necesite, de cada uno que elijo, copio el campo llamado Entrada a un contenedor en este caso Memo y ya leo cada línea de Memo lo meto en la Variable Pagare1, Pagare2...., y ahí entra lo que faltaba donde Cloayza y Movorack me han dado la clave:

Código SQL [-]
      With IbQueryParares do  
      begin
      close; 
      sql.clear;
      sql.text:= Format('select * from pagares where ENTRADA in (%s, %s) ', [Quotedstr(Pagare1), Quotedstr(pagare2)]);

Sólo falta como tu decías Kuan-Yiu, un blucle, o if si elijo un pagaré me voy a una línea de Sql, si son dos pues elijo otra para dos pagarés y así así, normalmente no elijo más de 8 ó 10 a la vez, los meto en un report y solucionado.

Muchísimas Gracias,
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
Exportar varios registros a Word con el mismo nombre de Variable feliz-58 Varios 4 31-08-2017 16:03:46
SELECT para encontrar registros con diferentes valores en el mismo campo gustavosv SQL 12 17-10-2014 22:34:35
buscar varios registros en una tabla mdcynsk Varios 1 26-07-2010 02:35:00
Recorrer todos los registros de una tabla que tengan el mismo campo Sayuri Conexión con bases de datos 3 08-12-2005 16:07:46
Seleccionar varios registros de una tabla por un campo vhirginia Conexión con bases de datos 19 27-04-2004 12:00:57


La franja horaria es GMT +2. Ahora son las 14:28:24.


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