Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Filtros para un TTable (https://www.clubdelphi.com/foros/showthread.php?t=54061)

georgejg 07-03-2008 20:15:23

Filtros para un TTable
 
Saludos, tengo la siguiente inquietud:

actualmente estoy conectado a una base de datos Oracle y cuando inserto un registro en una tabla... por medio del DBGrid (correspondiente a la tabla) aparecen los registros ya almacenados anteriormente.

Lo que necesito hacer esque cuando se quiera insertar un registro no aparezcan todos los registros que contiene la tabla en el dbgrid, solamente que aparezca el dbgrid limpio, simulando que fuera una tabla vacia.

e intentado con unos filtros pero :confused: no se como usarlos adecuadamente para lo q necesito.

les agradeceria una pronta respuesta :(

marcoszorrilla 07-03-2008 20:48:17

Lo que deseas realizar en un principio no es posible pues la rejilla al estar conectada a una fuente de datos, te mostrara todo los datos de esa fuente, quizás si le colocas un filtro "imposible", puedas lograr lo que deseas, es decir poner a la fuente de datos un filtro que de antemano sepas no se puede cumplir, en este caso no aparecerá nada y podras dar un alta con ese efecto que persigues.

Un Saludo.

georgejg 07-03-2008 21:07:12

como hacer un filtro
 
mira.

la idea general es la siguiente:

en el form tengo un DBGrid, un Booton para Insertar, uno para Cancelar. al clic en el boton insertar se debe activar el filtro que me muestre el dbgrid limpio, simulando que fuera una tabla vacia.

intente añadir un filtro al origen de datos del dbgrid (TTable), asegurándo de que nunca lo pueda cumplir ningún registro.

Lo intente apliacando en el evento BeforeInsert del TTable y lo quitas en el evento AfterPost del TTable. Es una forma rápida de simular lo que nos indicas.

poniendo la inquietud en otros terminos mi pregunta es:

:confused:como se hace un filtro a un table y el resultado me lo muestre en una DBGrid.

saludos

les agradeceria una pronta respuesta :(

marcoszorrilla 07-03-2008 21:12:54

Usando un Ttable quedaría así:

Código Delphi [-]
Table1.Filter:='Codigo = 430999';
Table1.Filtered:=True;

(Se supone que ese código no existe)

Un Saludo.

georgejg 07-03-2008 21:49:38

primero gracias por responder rapidamente:D

entonces..
lo que hice fue lo siguiente.
Puse la propiedad Active de TTable a True con esto me muestra lo que hay en la tabla en el DBGrid. ahora en el Booton1 inserte el siguiente codigo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Table1.Filter:= 'CONSECUTIVO_CONFIGURACION = 430999';
  Table1.Filtered:= True;
  Table1.Refresh;
  table1.Insert;
end;

y en el booton2 inserte:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  table1.Filtered := false;
  table1.refresh
end;

con eso entonces lo que sucese es q al ejecutar el projecto me muestra el DBGrid con los registros que hay en la tabla.

al dar clic en el booton1 primero me lanza un error diciendo "Operation not applicable" le doy "Ok" y me muestra el DBGrid tal como lo quiero.

puedo digitar los campos, pero :confused:al dar en insertar del DBNavigator lansa el mismo error "Operation not applicable" pero si me lo guarda en la base de datos.

y no me permite ingresar otro ni mucho menos me muestra una nueva fila en el dbgrid.

otra cuestion despues de activar el filtro y antes de digitar los registros tengo la oportunida de anular el filtro dando clic en el 2 boton.


asi q mi inquientud radica en como puedo anular ese mensaje de error y como hago par q el DBGrid me muestre una nueva fila.

que pena por tanta molestia pero les agradeceria una pronta respuesta.:(

o no se si conocen otra forma de ingresar nuevos registros a una Base de Datos por medio de un DBGrid pero sin mostrar los datos existentes en la tabla.

eduarcol 07-03-2008 21:52:29

utiliza una tabla de memoria, y en el afterpost vacias el ultimo registro ingresado.

georgejg 07-03-2008 21:54:21

como vacio el ultimo registro

saludos

georgejg 07-03-2008 22:07:43

lo q pasa es lo siguiente quiero q el usuario tenga la opcion de ir ingresando mas datos por eso al guardar el ultimo dato y dar tecla tabuladora o con el DBNavigator me muestre una nueva fila para seguir digitando.

repito si alguien sabe o conoce otra posibilidad de realizar esto se le agradeceria.

saludos
agradeceria una pronta respuesta

eduarcol 07-03-2008 22:34:51

Repito, deberias trabajar con tablas en memoria, yo utilizo las KbMemTable, y para lograr vaciarlos puedes trabajar con SavetoDataSet

Caral 07-03-2008 23:23:55

Hola
La opcion de Eduarcol es correcta, crear una tabla en memoria o tambien crear una tabla temporal (para mi la mejor opcion) ya que cuando se este seguro de que lo que se coloco es lo correcto se podria hacer el post a la tabla original.
Ahora pregunto:
Por que usar un dbgrid y no, o los dbedit, o edit sencillos?
La opción de marcoszorrilla es por supuesto correcta, genera un filtro de un producto inexistente, osea el dbgrid quedara vació, pero la tabla, no se, si se podrá seguir editando.
Me parece que hacer un filtro es innecesario (en este caso) ademas de que hace lento el programa cuando hay muchos registros.
Yo me iría por la opción de los edits.
Saludos

georgejg 07-03-2008 23:50:59

:Dhola y gracias por la respuesta.

mi idea original era usar edit para captuarar los datos ya que necesito hacer otro tipo de validaciones y formulas que no tengo la menor idea como hacerlas en un DBGrid.

el caso es q la idea ya fue planeada y en ese caso tengo q seguir trabajando en este hasta q no aprueven el cambio de conceptos.

por otro lado me gustaria saber como crear una tabla temporal que me permita suguir ingresando mas registros.

saludos

Caral 07-03-2008 23:57:31

Hola
Idea adicional y mas sencilla.
Coloca un PageControl y genera dos paginas.
En la primera coloca los edits que necesites para llenar los datos (tambien podrias colocar un dbgrid, tal vez, no lo he probado).
En cuanto tengas el dato lo pasas a la segunda pagina en donde con un dbgrid podras ver los registros que incluyas, con una sentencia sql a la tabla.
Es muy parecido al tutorial de facturacion que hay en el wiki.
Saludos

georgejg 08-03-2008 00:09:39

ok gracias.

el aplicativo se trabaja dentro de un PageControl y la idea es adicionar datos a la BD por ahora con DBGrid o con EDit y luego eso u otros datos de la base de datos puedan ser consultados y mostrados en un DBGrid para luego ser modificados.

gracias a todos culaquir inquietud les estare consultanto
saludos


La franja horaria es GMT +2. Ahora son las 12:33:54.

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