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 10-11-2004
nax nax is offline
Miembro
 
Registrado: mar 2004
Posts: 52
Poder: 21
nax Va por buen camino
Búsquedas a través de TTable y/o TQuery y resultado en DBGrid

Buenas buenas. Agradecería enormemente si alguien podría darme información al respecto. Resulta que a través de una consulta SQL vierto datos a un DBGrid (vía un TQuery). ¿Existirá alguna forma de que un usuario conforme teclea un nombre en alguna caja de texto, en el DBGrid se vaya seleccionando la fila que vaya coincidiendo con lo que el usuario teclea pero siendo una actualización conforme se pulsa caracter por caracter? Algo así como utilizar Locate en un TTable.
O bien, suponiendo que el caso anterior no tenga solución, ¿es posible que un DBGrid enlazado a un TTable contenga únicamente los registros que satisfagan algún criterio de búsqueda x?
De antemano gracias.
Responder Con Cita
  #2  
Antiguo 10-11-2004
le4br le4br is offline
Miembro
 
Registrado: nov 2004
Posts: 17
Poder: 0
le4br Va por buen camino
Seria algo como:

En el evento onkeypress del DBgrid añadi:

Código:
letras:=letras+uppercase(key);
ADOQuery1.LOCATE(CampoDeLaTabla, letras, [loPartialKey]);
En el evento onkeydown:

Código:
IF (KEY=38) or (key=40) then
letras:='';
end;
y por ultimo en oncelclick del DBGrid

letras:='';
Responder Con Cita
  #3  
Antiguo 10-11-2004
Dayvis Dayvis is offline
Miembro
 
Registrado: oct 2004
Posts: 22
Poder: 0
Dayvis Va por buen camino
Bueno al problema que tu tienes talvez lo puedas solucionar con un filtrado de datos (o quizas es lo que quieres) a travez de un TTABLE o un TQUERY para comenzar los tienes que tener es:

El TTable o el TQuery debe estar ligado con un TDataSource y este a su vez debe estar ligado a un TDBGrid para poder visualizar los resulados.

Al conectar el TTABLE a un tabla y al activar la tabla aparecen todos los datos en el DBGRID, y para filtar datos segun las letras que van poniendo y para poder ir visualizando los resultados tendrias que hacer un filtro mas o menos asi en el evento onchangre de tu Edit, en este caso yo le llame EFiltro a mi Edit:

procedure TForm1.EFiltroChange(Sender: TObject);
begin
if not (EFiltro.text = '') then
begin
DM.TTable.Filtered := False;
DM.TTable.Filter := '' + 'CAMPO' + ' Like ' + QuotedStr(EFiltro.text + '%')
DM.TTable.Filtered := True;
end
else
DM.TTable.Filtered := False;
end;

Esta seria la forma de filtar datos en un TTABLE ojo que si deseas hacer un filtrado con opciones de varios campos para que el usuario elija podrias reemplazar el filtro por:

DM.TTable.Filter := '' + CBFiltro.Text + ' Like ' + QuotedStr(EFiltro.text + '%');

donde CBFiltro es un Combobox donde listo los campos de la tabla con las cuales puedo filtrar. En componentes como Zeos me toco que en vez de poner % debi poner * para que realizara el filtrado.

Y ahora para realizar el filtrado con un TQUERY segira de la siguiente manera:

procedure TForm1.EfiltroChange(Sender: TObject);
begin

if not (EFiltro.Text = '') then
begin
TQuery.Close;
Tquery.SQL.Clear;
TQuery.SQL.Add('Select * from Producto where nombre like ' + '''' + EFiltro.Text + '%' + '''');
TQuery.Open;
end
else
begin
TQuery.Close;
Tquery.SQL.Clear;
TQuery.SQL.Add('Select * from Producto where nombre like ' + '''' + EFiltro.Text + '%' + '''');
TQuery.Open;
end;
end;

y para que puedas realizar un filtrado con opciones de varios campos
solo reemplazarias esta linea:

TQuery.SQL.Add('Select * from Producto where ' + CBFiltro.Text + ' like ' + '''' + EFiltro.Text + '%' + '''');

Bueno espero que te haya sido de mucha utilidad estos ejemplos que te puse antes de subirlos los probe y estan corriendo. Solo una pequeña cosa mas no soy un experto en esto pero me toco que cuando hize los filtrados con TQuery las respuestas de los datos desplegados al DBGrid fueron mucho mas rapidas que con un TTAble ahora depende de ti con cual desees trabajar.

Suerte y espero que te haya podido ayudar.
Responder Con Cita
  #4  
Antiguo 09-02-2005
ibstk ibstk is offline
Miembro
 
Registrado: jun 2004
Posts: 30
Poder: 0
ibstk Va por buen camino
Cita:
Empezado por Dayvis
... Bueno espero que te haya sido de mucha utilidad estos ejemplos...
Perfecto!

Hola,

Tengo que hacer un filtrado de lo campo "vicst". Filtrar datos segun los numeros (qualquer dato com 0, 1, 2, ..., o 9). Como hacer?

Solo ej., algo como:

Código Delphi [-]
else if ComboBox1.ItemIndex = 1 then
with ADOQuery1 do begin
  Filtered := False;
  Filter := 'vicst Like ' + '[0-9]'+'*');
  Filtered := True;
end

Un otro problema son los acentos. El filtro ignora los acentos.

Código Delphi [-]
else if ComboBox1.ItemIndex = 2 then
with ADOQuery1 do begin
  Filtered := False;
  Filter := 'vicst Like ' + QuotedStr('A'+'*');
  Filtered := True;
end

Funciona bien, pero caso los datos del campo vicst comenzam com acentos (ex.: Âxxx, Áxxx, Ãxxx, Àxxx, etc) el filtro no funciona. Como solucionar esto?
Responder Con Cita
  #5  
Antiguo 11-02-2005
ibstk ibstk is offline
Miembro
 
Registrado: jun 2004
Posts: 30
Poder: 0
ibstk Va por buen camino
Responder Con Cita
  #6  
Antiguo 11-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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:36: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