PDA

Ver la Versión Completa : Se puede? (Filtrar desde dentro de un DBGrid?)


b3nshi
12-04-2010, 22:02:22
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:

{ 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:

{ 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}