Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Se puede? (Filtrar desde dentro de un DBGrid?) (https://www.clubdelphi.com/foros/showthread.php?t=67347)

b3nshi 12-04-2010 22:02:22

Se puede? (Filtrar desde dentro de un DBGrid?)
 
Buenas tardes!

Les cuento q hace poco baje un sistema de control de stock hecho en Visual Basic. Y vi que el programa tenia algo muy interesante...

Haciendo uso de lo q supongo habra sido un DBGrid, uno se posicionaba en la primera columna y primera fila, escribia por ejemplo, un codigo, y al salir de ella se filtraba una base de datos y con los resultados encontrados te completaba el resto de la fila. Agregaba una nueva fila y t posicionaba en la segunda fila y primera columna para ingresar el siguiente codigo y asi... Con todos los productos q quisiera encontrar...

Entonces aqui viene mi duda... con que componente podemos hacer eso en Delphi? Se puede hacer con el DBGrid? Estuve haciendo pruebas pero si no conecto con una DataSet no puedo escribir nada en el DBGrid...

De todos modos seguire probando y bueno... mientras si alguien sabe y quiere contestar muchas gracias!

{Saludos}

Neftali [Germán.Estévez] 13-04-2010 12:50:05

Es un sistema un poco raro de trabajo, supongo (por lo que me parece) que usas una columna del grid para hacer una búsqueda sobre una base de datos por un campo clave (código) y una vez encontrado añades esa fila al Grid.

Yo hubiera utilizado un control externo para hacer eso, me parece más simple y menos lioso, pero bueno...

Lo primero es saber que ese DBGrid (como tú dices) debe estar conectado a un Dataset para poder trabajar; Puedes utilizar un TClientdataset, para ir guardando las filas que necesitas.

En el tema de buscar, supongo que tendrás que utilizar alguno de los eventos que "salta" al salir de la primera columna. En ese evento realizar una búsqueda sobre la tabla donde están los códigos; Si se encuentra el elemento, rellenar la fila, realizar el Post y añadir una nueva.

ecfisa 14-04-2010 21:01:59

Hola.
Tal como dice Neftali el tema pasa por capturar un evento para buscar y filtrar el resultado.
Podrías usar el evento OnSetText del campo asociado, y realizar allí los pasos pertinentes.

Con un TTable:
Código:

{ TTABLE: Usando DBDEMOS, customer.db }
procedure TForm1.Table1StateSetText(Sender: TField; const Text: String);
begin
  with Table1 do
  begin
      DisableControls;
      Filter:=Format('[%s] %s %s', ['State', '=', QuotedStr(Text)]);
      Filtered:= True;
      EnableControls;
      Append;
  end;
 
end;

Con un TIBTable:
Código:

{ TIBTABLE: Usando EMPLOYEE.GBD, CUSTOMER}
procedure TForm1.IBTable1COUNTRYSetText(Sender: TField;
const Text: String);
begin
  with IBTable1 do
  begin
      DisableControls;
      Filter:= Format('%s %s %s',['COUNTRY', '=' ,QuotedStr(Text)]);
      Filtered:= True;
      EnableControls;
      Append;
    end;
end;

Con algunas modificaciones no veo problema para que funcione con un IBDataSet.
Faltarían asimismo ajustar OnKeyPress del DBGrid (mayúsculas o minúsculas) y algún detalle más que puedas encontrar.

Saludos.

b3nshi 27-04-2010 20:57:09

Muchas gracias por sus respuestas, ahora me pondre a ver como podria hacerlo y cualquier cosa les aviso.

Perdon por la demora, pero estos dias ando haciendo un par de sistemas en PHP, y unas instalaciones de camaras de seguridad asi q ando bien entretenido.

Nuevamente, muchas gracias!

{Saludos}


La franja horaria es GMT +2. Ahora son las 09:18:13.

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