Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Que evento debo capturar? (https://www.clubdelphi.com/foros/showthread.php?t=19911)

Alfredo 30-03-2005 22:24:30

Que evento debo capturar?
 
Ok. Otra vez clipper....

Pues en aquellos tiempos usaba una funcion que me daba verdadero si se actualizaba un get en la pantalla: UPDATED()

Solo deseo activar el boton "Grabar" solo si el usuario "modifica" uno de los varios Tedit's. Ok se que puedo hacerlo en el OnExit de cada Tedit, pero creo que debe haber algo mas general,

Cual seria el evento que necesito capturar?

(a veces uno se tranca en unas cosas.....) :D

marcoszorrilla 30-03-2005 23:00:02

Si utilizas DbEdits puedes colocar una variable pública de tipo lógico que haga de semáfooro:
Código Delphi [-]
 procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
 begin
 lCambios:=True;
 end;

Y luego en el botón que tengas para grabar consultas como quedó el valor de dicha variable para saber si se hicieron cambios.

Un Saludo.

marcoszorrilla 30-03-2005 23:02:17

Con TEdits puedes hacer algo parecido programas el evento OnChange de un Tedit y luego asocias todos los demas tedits a este evento.

Un Saludo.

Pablo Carlos 31-03-2005 02:27:24

Cita:

Empezado por Alfredo
Solo deseo activar el boton "Grabar" solo si el usuario "modifica" uno de los varios Tedit's. Ok se que puedo hacerlo en el OnExit de cada Tedit, pero creo que debe haber algo mas general,
Cual seria el evento que necesito capturar?
(a veces uno se tranca en unas cosas.....) :D

Quisiera agregar algo... si tienes el Boton_Grabar en Enabled := False y en el evento AfterEdit de la tabla pones Boton_Grabar.Enabled := True; y luego en el evento AfterPost de la misma tabla lo pasas a false
Este es mi aporte
Saludos bye

jachguate 31-03-2005 15:48:41

No recuerdo haber leido que los datos en los edits estuvieran asociados a alguna tabla...

si fuese asi, lo mas natural sería el uso de DBEdits, ¿no?, y valerse de la propiedad Modified del DataSet para saber si se ha aplicado alguna modificación sobre los valores del registro activo

Hasta luego.

;)

roman 31-03-2005 19:08:24

Cita:

Empezado por jachguate
si fuese asi, lo mas natural sería el uso de DBEdits, ¿no?, y valerse de la propiedad Modified del DataSet para saber si se ha aplicado alguna modificación sobre los valores del registro activo

Concuerdo contigo en que la propiedad Modified nos permite prescindir del semáforo de Marcos. Pero el evento DataChange que él propone es muy bueno para poder habilitar en automático el botón en cuestión.

// Saludos

jachguate 31-03-2005 20:42:54

oh, claro. El punto, es que no está claro (al menos para mi) el que haya un datasource de por medio...

saludos.

Alfredo 31-03-2005 22:32:29

Que bien...
 
Pues les agradezco a todos...

Para agregar inf. En el form utilizo Tedits, un para de Tmemos y yn Tcombobox. Con un boton "Guardar" muevo los datos a la base de datos. Uso un datamodule con su respectivo Tquery y Tdatasource.

Me propuesta de Marco es en la que estaba pensando, solo que confundido en el evento. Pero vean que es interezante .... deberia haber un evento que capturara una modificacion de este tipo sin tener que recurria a banderas o tratamiento individual...(como la funcion que les comente de clipper) jeje... Bueno en todo caso tambien se puede crear no?.... cuando tenga un tiempito le buscare la vuelta, si la termino la publico. :D

roman 31-03-2005 23:06:32

A mi me parece que aquí hay una confusión y no sé si debe a que cuando escribes TEdit en realidad quieres escribir TDBEdit o bien que hay algo que no nos has contando.

Si estás usando TEdit (sin el DB) entonces no aplica lo del evento DataChange del DataSource ya que el control no está conectado directamente al dataset.

Y en tal caso, el de usar TEdit (sin DB), tampoco tienes que tratar casos individuales.

Ya Marcos lo señaló desde el principio:

Asignas a todos los TEdit el mismo evento OnChange. No necesitas ninguna bandera. Al comienzo pones el botón inhabilitado y en cuanto se entre a este evento lo habilitas.

// Saludos

Alfredo 01-04-2005 15:52:23

No ROMAN esta bien como lo expreso, uso edit "simples y silvestres" (no TDBEdits) y en efecto, la propuesta de Marco es a mi novato entender la mas practica. Solo que estaba enfrascado en el evento ONexit de los edits y demas componentes. El caso es que el form, lo uso para editar e ingresar datos.
Por Ejemplo: Busco codigo ingresado en el edit1.text: "XXX" por una consulta. Si el cursor esta vacio entonces me habilita los demas controles para ingresar todos los datos correspondientes a dicho codigo. En caso de que el codigo exista, entonces (el codigo es unico) habilita los controles y recibe los datos desde el cursor para su edicion o consulta. No queria tener que agregar otro boton "EDICION" sino que por las caracteristicas del trabajo, si entras es solo para editar.
En cualquier momento el usuario pude cancelar la edicion (no tengo la base de datos abierta, solo tome los datos y los "pegue" en los edit). Quiza es mi viejo estilo de programación el que impera, pero no me terminande cuadrar los controles DBXXXXX, porque creo que las Bases de datos estaran abiertas mas tiempo que el necesario...nose.

Actualmente lo tengo de esta forma: Todos los controles que reciben datos los tengo en un panel y el su evento OnEnter cambio el boton guardar a Enabled, y una ves guardado el registro, lo inhabilito.
En todo caso un teraGracias, debo investigar un poco mas de los eventos de la DB, pero realmente no voy a durar mucho con paradox, me pienso mudar a firebird...jeje

jachguate 01-04-2005 16:29:21

En primer lugar, la decisión de mudarte a firebird me parece muy buena... pero. ¿que te hace pensar que usando dbEdits la base de datos estará abierta mas tiempo del necesario?? :confused:

Habrá que comenzar por explicar que entendes por "tener abierta" una base de datos... y por otro lado, te recomiendo investigar un poco sobre los controles de datos (tipo TDBEdit y similares). Hay mucha gente que los usa, y mucha que no los usa... pero dada la razón que das, creo que valdrá la pena que explores e investigues un poco mas para tener un buen criterio y tomar tu propia decisión.

La mia: los uso siempre que sea conveniente, pues me fácilitan bastante la vida.. ;)

Hasta luego.

;)

Alfredo 01-04-2005 17:17:28

Cita:

Empezado por jachguate
La mia: los uso siempre que sea conveniente, pues me fácilitan bastante la vida.. ;)

Sin querer parecer ignorante, podrias por favor decirme, brevemente, cuando a tu parecer son convenientes? (me gustaria beneficiarme de la experiencia)

,... es que en un programa que combine los dos metodos (en un form, edits, y en otro use DBGrid. tuve inconvenientes, de hecho hice hasta una consulta sobre ese tema:
http://www.clubdelphi.com/foros/showthread.php?t=19189
) :D

jachguate 01-04-2005 17:48:34

Pues en general son convenientes media vez se use solamente para mostrar/editar datos almacenados en el dataset (o derivados mediante campos calculados).

Cuando usaría un edit normal es, por ejemplo, en el caso del primer campo de tu formulario, para que el usuario pueda ingresar un código, y en base a este valor realizar una búsqueda en la base de datos.... asi que si yo fuese quien programó este formulario, probablemente el primer campo sería un Tedit y el resto TDBEdits.

Este es un comportamiento, sin embargo, que evito siempre que me sea posible proveer de otro mecanismo de búsqueda igualmente conveniente para el usuario.

Lo mejor, claro, es que en base a la lectura de libros/artículos/revistas, el help y tu propia experiencia vayas formando y afinando tu propio criterio.

Saludos.

;)

Alfredo 01-04-2005 19:08:28

Muy agradecido, amigos :D


La franja horaria es GMT +2. Ahora son las 03:20:33.

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