Pues entonces estás haciendo uso de un dataset, ya decía yo
y parece ser que no me entendiste sobre el uso del evento
OnGetText,
Todo sabemos que en Delphi se puede asignar un evento tanto en tiempo de diseño como en tiempo de Ejecucion, en éste caso podrías asignar el evento
OnGetText en tiempo de Ejecucion de la siguiente manera:
Primeramente debo implementar un Procedimiento o funcion, segun sea el caso,con cualquier nombre, pero que tenga los mismo parámetros que tiene nuestro evento que queremos asignarle: Por ejemplo el evento
OnGetText tiene como declaracion y parametro en mi caso:
Código Delphi
[-]procedure ZTable1CampoXGetText(Sender: TField; var Text: String;DisplayText: Boolean);
Entonces como todo evento en delphi es un Puntero a un Procedimiento o funcion,segun sea el caso; lo que se puede hacer es declarar nuestro propio Manejador de evento en este caso puedo creame un Procedimiento de ésta forma:
Código Delphi
[-] Procedure Cambiar_Vista_de_Columna(Objeto: TField; var Texto: String; MostrarTexto: Boolean);
Si observamos la declaracion del procedimeinto "Cambiar_Vista_de_Columna" tiene la misma cantidad de parámetros y los mismos parametros que el evento
OnGetText y tiene que ser así:
Ahora vamos a su implementacion:
Código Delphi
[-]procedure TForm1.Cambiar_Vista_de_Columna(Objeto: TField; var Texto: String; MostrarTexto: Boolean);
begin
Texto:=Encryptar(Texto);end;
Ahora para asignarlo en tiempo de ejecucion sencillamente podemos hacerlo de la siguiente manera:
Código Delphi
[-]DBGrid1.DataSource.DataSet.Fields[3].OnGetText:=Cambiar_Vista_de_Columna;
Lo que estamos haciendo en la anterior linea de código es hacer que el puntero del evento
OnGetText del
cuarto campo de nuestro DataSet, apunte a la primer direccion de memoria del nuestro procedure "Cambiar_Vista_de_Columna", de esa manera tiene una direccion de memoria válida con lo cual Delphi ejecutará las lineas de código de nuestro procedimiento; es lo que comunmente se llama
"Asignacion dinámica de Eventos", ésta linea la puedes poner justo antes de ejecutar el Script o sentencia SQL o simplemnete usar el evento
OnCreate del formulario; por supuesto que tambien puedo
anular la ejecucion del evento(en éste caso OnGetText) en el momento que yo quiera,con tan solo hacer:
Código Delphi
[-]DBGrid1.DataSource.DataSet.Fields[3].OnGetText:=Nil;
No sé si me he dejado entender, pero creo que con solo hacer eso puedes solucionar tu problema, sin estar recorriendo tu dataset, así como lo haces, cosa que lo veo no muy práctica ni óptima en éste caso.
Saludos...