Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-08-2003
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
filtrar con DbLookupComboBox

Hola a todos
Voy a poner un ejemplo sencillo de lo que realmente quiero hacer, supongamos que tengo una base en paradox, con los campos:

A, B, C, D, E y F

y utilizo un form con varios dbedit para visulizar los datos.

Ahora bien, quiero realizar un procedimiento de búsqueda abriendo otro form con varios dblookupcombobox (uno para cada campo)

Quiero que el usuario busque por cualquier de ellos, por ejemplo, que clickee en E, se despliegue la lista (sin duplicados), seleccione un registro, luego se le ocurre clickear en B seleccionar otro y así sucesivamente pero en ningún orden. Puede ser por un campo, por dos o por todos. Una vez que el usuario selecciona lo que quiere clickea en un botón que toma el text de los dblookupcombobox y filtra una query para luego mostrar los resultados en el form principal.

Yo hice algo mediante SQL y funciona siempre y cuando siga un orden al seleccionar y ademas se está haciendo algo enorme.

Bueno, espero que se haya entendido lo que deseo hacer y porfavor, si alguien puede ayudarme y decirme como encararía algo así se lo voy a agradecer mucho.
Responder Con Cita
  #2  
Antiguo 06-08-2003
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Hola, puedes crearte la sql en tiempo de ejecución, y a los eventos de cambio del contenido de los desplegables recomponer y ejecutar la sql comprobando si el contenido de los desplegables es blanco o no. Si es blanco no añades la linea de comparación con ese contendio para hacer el filtro y si es <> del blanco la añades.
Posteriormente deberas de crearte la lista de parametros también con su naturaleza.
Te añadiría de programas viejos (cuando trabajaba con paradox) alguna estructura de este tipo, pero tampoco quiero hacer demasiado largo este mensaje. Si te es necesario de forma imprescindible, te lo anexo.
Un saludo y suerte.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #3  
Antiguo 06-08-2003
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
Antes que nada muchas gracias por responder mi mensaje.
Mira, si bien ya he hecho algunas aplicaciones en Delphi y con bases de datos, no soy experto en esto, recien comienzo y no logro darme cuenta de algunas cosas como realizar sql en tiempo de ejecución. Quisiera que porfavor me expliques un poco más como lo hago y si es posible y no es mucha molestia para vos que me anexes alguna de esas estructuras, si querés podes enviarmelo por mail a walter@rodamet.com , aunque si lo pones en el foro podría serle de utilidad a alguna otra persona.
Un saludo y gracias nuevamente.
Walter
Responder Con Cita
  #4  
Antiguo 07-08-2003
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Bueno, vamos allá.

Es un tanto royo, pero funciona.


// Limpio la lista de STRING que pudiese existir
Query.SQL.Clear;

// Compongo la SQL en su cuerpo principal
Query.SQL.Add('SELECT RO.NumOrd_RegOfe,RO.Varord_RegOfe,RO.Estado_RegOfe,');
Query.SQL.Add('RO.AnyoReg_RegOfe,RO.TitOfe_regOfe,RO.NomCli_RegOfe,RO.NumObr_RegOfe,');
Query.SQL.Add('RO.FecOfe_RegOfe,RO.FecCon_RegOfe,RO.ImpCon_RegOfe,RO.ImpOfe_RegOfe,');
Query.SQL.Add('RO.DesAct_RegOfe');
Query.SQL.Add('FROM RegOfertas RO');
Query.SQL.Add('WHERE');
Query.SQL.Add('(RO.FecCon_RegOfe >= :EditFechaInicio)');
Query.SQL.Add('AND');
Query.SQL.Add('(RO.FecCon_RegOfe <= :EditFechaFinal)');

/* Aqui es donde empiezas como tu quieres a realizar a medida dicha SQl dependiendo de algunos valores
de los Edits */

// Compruebo que tengan valor los edits y lo meto en la SQL
// ya que establecer estos otros parametros es opcional al usuario
// En este caso compruebo hasta el contenido de 4 edits

if EditApenom_cli.text <> '' then
begin
Query.SQL.Add('AND');
Query.SQL.Add('(RO.NomCli_RegOfe LIKE ("%' + EditApenom_cli.text + '%"))');
end;

if EditTitulo.text <> '' then
begin
Query.SQL.Add('AND');
Query.SQL.Add('(RegOfertas.TitOfe_RegOfe LIKE ("%' + EditTitulo.text + '%"))');
end;

if EditEstOfer.text <> '' then
begin
Query.SQL.Add('AND');
Query.SQL.Add('(RegOfertas.Estado_RegOfe LIKE ("%' + EditEstOfer.text + '%"))');
end;

if EditDesActividad.text <> '' then
begin
Query.SQL.Add('AND');
Query.SQL.Add('(RegOfertas.DesAct_RegOfe LIKE ("%' + EditDesActividad.text + '%"))');
end;

// Abro la consulta una vez establecida la String de la SQL
Query.Open;


La propiedad del dataset Query.ParamCheck la estableces a False.

Creo que con esto te funcionará, espero no haber olvidado nada.

Suerte.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #5  
Antiguo 07-08-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Hola a todos, solo una aclaración, después de inciar unas comillas deja espacio en blanco, en caso contrario se va añadir todo unido y no sirve.

Normalmente lo que yo hago es dejar el espacio en blanco al final, ejemplo:
query1.sql.add('esto es un ejemplo ');
query1.sql.add('ahora va bien ');
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #6  
Antiguo 11-08-2003
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
Muchísimas gracias por tu ayuda Cabanyaler por responderme pero no logré lo que necesitaba ya que los datos me los sigue mostrando con duplicados.
Saludos y gracias nuevamente.
Walter
Responder Con Cita
  #7  
Antiguo 11-08-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Eso es lo que pasa cuando se sacan datos de varias tablas con algún campo en común y no se igualan dichos campos ejemplo:
Tenemos la tabla mia con campos: id,nombre,errores.
Tenemos la tabla tuya con campos:num,dato,id.

Al hacer una consulta usando estas dos tablas se debería hacer esto con los campos iguales:

select mia.*, tuya.dato
from mia,tuya
where mia.id = tuya.id

De esta forma no te dupica los datos.

Pero por lo que veo, en esta consulta solo utilizas una tabla. Prueba a poner después del Select la palabra "distinct" o "distinct row", espero que te sirva.

Con respecto a añadir código SQL no hace falta escribir tantas veces la propiedad add del query:

antes:
query1.sql.add('tengo que hacer muchas cosas ');
query1.sql.add('y todas son para hoy');

ahora:
query1.sql.add('tengo que hacer muchas cosas '+
'y todas son para hoy');

Y por último es mejor acceder a los parámetros de una query a través de la propiedad params ejemplo:

antes:
query1.parambyname('campo').asinteger;
en este código necesita acceder a este campo y debe buscar la referencia escrita para saber que parámetro es.

ahora:
query1.params[0] := mydato.//no estoy seguro si la propiedad se llamaba así o algo parameters.
De esta forma sabe directamente a qué parámetro estamos haciendo referencia y funcionará un poquito más rápido.

En la ayuda vienen varios ejemplos de esto, te aconsejo que la miras ya que no estoy muy seguro si el nombre de la propiedad es ese, además de no acordarme si después había que decir el tipo del parámetro con "asintegero asString".

Saludos.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #8  
Antiguo 11-08-2003
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
Hola Corbatin, muchas gracias por tu ayuda. Quería decirte que cuando selecionas varios campos de una misma tabla no puedes usar el Select distinct porque no funciona, solo hace efecto cuando seleccionas 1 solo campo.
Gracias nuevamente.
Un abrazo.
Walter
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


La franja horaria es GMT +2. Ahora son las 05:04:07.


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