Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Busquedas multibles tablas
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Busquedas multibles tablas

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
Sizne
Magnífico usuario


Registrado: Oct 16, 2006
Mensajes: 46

Asunto: Busquedas multibles tablas Responder citando

Hola!
Quisiera que me den algunas ideas de como poder realizar el codigo en Delphi cuando estoy usando de Base de Datos SQL SERVER. en el sigte caso:

Quisiera realizar tipos de busquedas por varios campos pero de diferentes tablas, es decir:
TUniversitario:IdE,CI,NombreAlumno,Apellidos,Pais,NombreCarrera,TiempoCarrera...etc
TMateria:IdM,IdE,SiglaMateria,NombreMateria,SemesteAnual,Gestion,Calificacion,etc...
TBeca:IdB,IdE,Fecha,MontoMes, MontoTotal,etc.
....y tengo mas tablas que estan relacionadas por Tuniversitario.

Como ven las dos ultimas tablas estan relaciondas con TUniversitario por medio de IdE.
El 1ero ADOQuery1 y los otros son ADOTables(X) y estan relacionadas con MasterSource, MasterFields.....Cada tabla tiene su propia informacion, ya la introduci.

Ahora lo que quiero es realizar una busqueda simultanea por decir por medio de dos tablas o trees.
ejemplo:
Creando dos combobox, dos Tedit
Combobox: Nombres Carrera
Tedit: Juan Medicina

Y en un DBGrid1 quisiera que me aparezca la informacion "a medida que estoy escribiendo el nombre Juan y luego reduzca la informacion del DBGrid1 cuando escriba la carrera medicina"
Algun componente que pueda facilitarme? o como tendria q programarlo? Estaba colocando el sigte codigo para agrupar todos los campos:
Código:

Select U.*,M.*,B.*
From TUniversitario U, Tmateria M, Tbeca B
Where U.IdE=M.IdE and U.IdE=B.IdE

Esto para que seleccione todo los campos, lo coloque en un ADOQuery2
Pero en la busqueda como seria?

oTRA vez mas gracias por la ayuda
MensajePublicado:
Sab Abr 03, 2010 8:19 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Busquedas multibles tablas Responder citando



Anuncios



Sizne escribió:
Hola!
Quisiera que me den algunas ideas de como poder realizar el codigo en Delphi cuando estoy usando de Base de Datos SQL SERVER. en el sigte caso:

Quisiera realizar tipos de busquedas por varios campos pero de diferentes tablas, es decir:
TUniversitario:IdE,CI,NombreAlumno,Apellidos,Pais,NombreCarrera,TiempoCarrera...etc
TMateria:IdM,IdE,SiglaMateria,NombreMateria,SemesteAnual,Gestion,Calificacion,etc...
TBeca:IdB,IdE,Fecha,MontoMes, MontoTotal,etc.
....y tengo mas tablas que estan relacionadas por Tuniversitario.

Como ven las dos ultimas tablas estan relaciondas con TUniversitario por medio de IdE.
El 1ero ADOQuery1 y los otros son ADOTables(X) y estan relacionadas con MasterSource, MasterFields.....Cada tabla tiene su propia informacion, ya la introduci.

Ahora lo que quiero es realizar una busqueda simultanea por decir por medio de dos tablas o trees.
ejemplo:
Creando dos combobox, dos Tedit
Combobox: Nombres Carrera
Tedit: Juan Medicina

Y en un DBGrid1 quisiera que me aparezca la informacion "a medida que estoy escribiendo el nombre Juan y luego reduzca la informacion del DBGrid1 cuando escriba la carrera medicina"
Algun componente que pueda facilitarme? o como tendria q programarlo? Estaba colocando el sigte codigo para agrupar todos los campos:
Código:

Select U.*,M.*,B.*
From TUniversitario U, Tmateria M, Tbeca B
Where U.IdE=M.IdE and U.IdE=B.IdE

Esto para que seleccione todo los campos, lo coloque en un ADOQuery2
Pero en la busqueda como seria?

oTRA vez mas gracias por la ayuda


Efectivamente, para búsquedas de varias tablas tienes que utilizar SQL, en concreto la cláusula "LIKE", en tu caso sería algo así:

Código:

Select U.*,M.*,B.*
From TUniversitario U, Tmateria M, Tbeca B
Where U.IdE=M.IdE and U.IdE=B.IdE and (nombre_campo_busqueda like  :pCampoBusqueda1 or nombre_campo_busqueda2 like :pCampoBusqueda2)


Ten en cuenta que he utilizado parámetros: :pCampoBusqueda1 y :pCampoBusqueda2, por lo que tendrás que indicar el tipo de datos y el valor de estos parámetros, por ejemplo:

Código:

  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select U.*,M.*,B.*');
  ADOQuery1.SQL.Add('From TUniversitario U, Tmateria M, Tbeca B');
  ADOQuery1.SQL.Add('Where U.IdE=M.IdE and U.IdE=B.IdE and ');
  ADOQuery1.SQL.Add('(nombre_campo_busqueda like  :pCampoBusqueda1 or nombre_campo_busqueda2 like :pCampoBusqueda2)');
  ADOQuery1.Parameters.ParamByName('pCampoBusqueda1').DataType := ftString;
  ADOQuery1.Parameters.ParamByName('pCampoBusqueda1').Value := Combobox1.Text;
  ADOQuery1.Parameters.ParamByName('pCampoBusqueda2').DataType := ftString;
  ADOQuery1.Parameters.ParamByName('pCampoBusqueda2').Value := Combobox2.Text;
  ADOQuery1.Open;


Como siempre te muestro un ejemplo, cambia el nombre de tus campos, del ADOQuery y de los TComboBox o TEdit que utilices para introducir el valor de los filtros.

Si lo que quieres es que te vaya filtrando conforme se vaya escribiendo deberás colocar lo anterior el evento OnChange del TEdit o en el evento OnClick del TComboBox.

También tienes que tener en cuenta el tipo de filtro que quieras, en el ejemplo, te he puesto un "or" entre los dos "like", esto hace que se cumpla uno u otro filtro, si pones un "and" obligas a que se cumplan ambos. Esto lo puedes ir modificando a tu medida y añadir los "like" que quieras.

Otra cosa a tener en cuenta es que si tienes muchos registros en las tablas implicadas y la consulta SQL anterior tarda más de un segundo en ejecutarse, puede provocar que se ralentice la escritura en el TEdit para la selección del valor a filtrar, esto se suele arreglar con un TTimer, aunque complica un poco las cosas. Como te he comentado en otro post de este foro, si quieres implementar esto y tienes muchos registros en las tablas puedes ver este ejemplo, donde se emplea un TTimer para evitar ese molesto efecto de escribir en el TEdit y que tarde uno o dos segundos en salir lo que has escrito:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=278
MensajePublicado:
Sab Abr 03, 2010 10:20 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A