Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   onvalidate (https://www.clubdelphi.com/foros/showthread.php?t=49097)

lejia 12-10-2007 17:32:31

onvalidate
 
Ya me comentaron que esto obtiene cuando se modifica un dato en un dbgrid, pero como se cuando tengo que capturarlo, por ejemplo, yo tengo un dbgrid donde se me muestra una consulta sql, con un query,, pues kiero saber que celda se modifica, ya que en el dbgrid, no viene ningun cellupdate, o algo parecido, y en que lugar de mi programa tengo que invocar a esa funcion onvalidate. Se que es de tipo field, campo, pero la cuestion es como la uso, gracias.

jhonny 12-10-2007 17:48:42

mmm, OnValidate es un evento que esta asociado al TField, para programar en él basta con ir al editor de campos del dataset, seleccionar el campo deseado e ir en el object inspector a la pestaña events, buscar OnValidete, hacer doble click y allí es donde comienzas a trabajar lo que necesites ;).

lejia 12-10-2007 19:53:46

perdona, pero yo tengo un dbgrid, donde muestro un query, asi que lo que tengo es un query, y un datasource relacionado con el dbgrid, asi que no entiendo muy bien donde tengo que empezar a usarlo, me entiendes?, perdona mi torpeza.

eduarcol 12-10-2007 19:57:14

Query = Dataset

Doble click al query, Selecciona Add All Fields

Ubica el campo que quieres y en el inspector de objetos mira sus eventos

lejia 12-10-2007 20:28:57

hola de nuevo, no es posible, porque la consulta la creo en tiempo de ejecucion. asi que no que campos tengo hasta que la lanzo.

eduarcol 12-10-2007 20:35:53

pero si ya conoces los campos puedes incluir en la consulta la clausula AS y los puedes crear manualmente, luego borras la consulta y los campos quedan, lo unico que tienes que hacer es asegurarte que los nombres coincidan

jhonny 12-10-2007 20:58:02

Cita:

Empezado por lejia (Mensaje 238222)
hola de nuevo, no es posible, porque la consulta la creo en tiempo de ejecucion. asi que no que campos tengo hasta que la lanzo.

En ejecución puedes hacerlo asi, si conoces los nombres de los campos en cuestión:

1. Creas un procedimiento asi, por ejemplo:

Código Delphi [-]
procedure TForm1.validador(Sender: TField);
begin
  //Escribes el codigo que debe ejecutar el OnValidate
end;

2. Despues de traer los datos en el Query que esta en ejecución haces lo siguiente:

Código Delphi [-]
DataSetEnCuestion.FieldByName('CampoEnCuestion').OnValidate := validador;

De esa manera ya debe disparase dicho evento debido a que esta asignado ;).

Espero te sirva ;).

eduarcol 12-10-2007 20:59:48

Esa no me la sabia, todos los dias se aprende algo nuevo gracias jhonny

jhonny 12-10-2007 21:06:52

Cita:

Empezado por eduarcol (Mensaje 238240)
Esa no me la sabia, todos los dias se aprende algo nuevo gracias jhonny

Creia que a eso era a lo que te referias :D.

eduarcol 12-10-2007 21:17:18

si pero no sabia como asignarlo en ejecucion siempre habia realizado la asignacion Estatica...

Me refiero no sabia que podia referenciarse de esa manera el objeto TField

jhonny 12-10-2007 21:39:08

Cita:

Empezado por eduarcol (Mensaje 238247)
si pero no sabia como asignarlo en ejecucion siempre habia realizado la asignacion Estatica...

Me refiero no sabia que podia referenciarse de esa manera el objeto TField

¿Te refieres a la forma de asignar el evento en ejecución o a la llamada al campo por medio del FieldByName?

eduarcol 12-10-2007 21:47:01

a la forma de asignar el evento a un TField, yo siempre crei qe solo se consideraban como objetos si tenias la forma MitablaMicampo pero ahora que lo razono por supuesto que es ilogico lo que yo pensaba... que falta de imaginacion tengo

jhonny 12-10-2007 22:08:49

Cita:

Empezado por eduarcol (Mensaje 238253)
a la forma de asignar el evento a un TField, yo siempre crei qe solo se consideraban como objetos si tenias la forma MitablaMicampo pero ahora que lo razono por supuesto que es ilogico lo que yo pensaba... que falta de imaginacion tengo

Ahhh, bueno asignar un evento en ejecución es mas común a la hora de crear componentes ;). Pero a veces tambien es necesario en otras ocaciones como esta.

En cuanto a lo de MiTablaMiCampo... pues como los dataset tienen una propiedad de tipo TFields(Que es un arreglo de campos), pues por allí es que se pueden acceder en ejecución, de manera pues que en determinados casos tambien puedes usar MiTabla.Fields[0].AsLoQueSea.


La franja horaria es GMT +2. Ahora son las 15:38:43.

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