![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Bueno ,viendo el problema de Wbarrantes veo que la cosa se ha complicado demasiado de lo que parece.
Si lo que se desea es encriptar el contenido de una columna en un DBGrid, pues yo veo dos alternativas:1ra.- Hacerlo directamente en el SERVER Tener una funcion o hacer uso de una funcion encriptadora directamente en la consulta SQL en el server es decir mi consulta SQL podría ser así: Con eso me evito la tarea de hacerlo desde Delphi. ![]() 2da.- Haciendolo desde Delphi Desde Delphi lo que se podría hacer es utilizar el evento OnGetText que todo Campo Persistente tiene y poner un código sencillo como éste: Desde luego para hacer uso del evento OnGetText lo primero que tendriamos que hacer es agregar nuestro campo en cuestion(CampoX) como campo persistente en el Dataset(Query o Table) que trae los datos de la base de dato. .Ésta solucion evitará estar modificando los datos en la base de datos, ya que como te han mencionado anteriormente si pones al Dataset en estado de Edicion (Data.Edit; ) se corre el riesgo de modificar los datos en la base de dato, y lo que yo veo es que solo se necesita mostrar los datos encriptado , pero que en la base de datos queden intactos , es decir que no se modifiquen. .Espero que te sea de ayuda. ![]() Saludos... ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 Última edición por rgstuamigo fecha: 04-10-2010 a las 22:07:16. |
|
#2
|
||||
|
||||
|
Cita:
1.el script a ejecutar 1.1 con el nombre de la conexion que utilizara 1.2 con el nombre del path donde se guardara 1.3 el campo que se desea encryptar 2. Laconexion a utilizar 3. el tipo de archivo en que se guardara la informacion del scrip (elformato,el separador,etc) osea se ejecutan varios scripts en tiempo de ejecucion, cada cual se conecta con el usuario,pass,y la tabla que se desea, y guarda el resultado segun el propio XML lo establesca para cada caso por lo tanto no existe un campo persistente al caul pueda asignarle el evento OnGetText... el metodo de encriptar, me es dado por un provedor, por lo que solo puedo hacer referencia al mismo enviando un string, y reciviendo el string encriptado....No puedo encriptar a nivel de base de Datos... que puedo hacer? Gracias a todos por sus comentarios... |
|
#3
|
||||
|
||||
|
Cita:
Cómo lees y guardas los datos del archivo XML al DBGrid? Supongo que éstas utilizando algun DataSet para hacerlo... es así o no?![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 |
|
#4
|
||||
|
||||
|
ok despues de cargada la conexion (el user ,pass,database,etc...) ejecuto el script que leo del archivo XML:
posteriormente conecto el data source, con lo que la informacion me queda ligada al DBgrid
con esto en marcha, procedo a recorrer el dataset, para encriptar el campo que deseo(que es un valor que me viene dado en el XML de configuracion de la aplicacion)...
Nota: el edit1.Text contiene elnombre de la columna que deseo encriptar, esto para efectos de pruebas de funcionamiento, de momento... |
|
#5
|
||||
|
||||
|
Ayuda!!!!
este ultimo codigo
funciona a la perfeccion pero solo cuando el resultado del script no tiene espacios vacios... de ser asi, cuando aplica la sentencia Data.next; me envia el mensaje de error descrito anteriormente... alguna idea al respecto? como podria validar este problema, o es acaso que recorro mal el data source? |
|
#6
|
||||
|
||||
|
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: 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: 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: Ahora para asignarlo en tiempo de ejecucion sencillamente podemos hacerlo de la siguiente manera: 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: 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... ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 Última edición por rgstuamigo fecha: 04-10-2010 a las 23:57:13. |
|
#7
|
||||
|
||||
|
Genial
solo una ultima modificacion a tu codigo, por aquello que alguien tenga algun problema parecido a futuro....
y pues el resultado es mejor de esta manera, pues no tengo que recorrerlo, por lo que si me parece mas eficiente... y por ultimo un refresh para que el cambio sea visible imediato...
|
|
#8
|
||||
|
||||
|
Muchas Gracias
Y pos de verdad muchisimas gracias a todos los que sacaron su ratito, para ayudarme... de verdad muy agradecido y si pasan por CR, pues los invito a una imperial... jejejeje
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Error de Edicion con DBGrid | chipcrazy | Varios | 1 | 06-11-2008 12:40:51 |
| Edición de un DBGRID | luxus | Conexión con bases de datos | 1 | 13-02-2007 11:34:26 |
| DBGrid. Contenido de celda en edicion | ManelC | Varios | 2 | 06-07-2006 23:01:18 |
| Edicion DBGrid | Caro | Conexión con bases de datos | 2 | 09-06-2006 18:02:26 |
| DBGRID detectar fin de edicion de campo | andrestsas | Tablas planas | 2 | 12-08-2003 17:11:02 |
|