FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Prueba y solución de problema en MIDAS: falta de "blank flag" tras AppendData.
Hola amigos.
La clase TClientDataSet posee un método para añadir al conjunto de datos los registros contenidos en un OLEVariant, del tal manera que puede ser utilizado para copiar los registros de un TClientDataSet a otro:
Cabe decir que la función para la cual fue diseñado originalmente no es copiar filas entre conjuntos de datos clientes, sino agregar los registros provenientes de un objeto proveedor. Sin embargo, tanto estos registros como la propiedad Data de TClientDataSet vienen bajo el mismo formato: un data packet. De ahí que pueda ejecutarse una sentencia como la anterior (se agregan los registros que están en CDS2 al contenido actual de CDS1). No copia los campos de tipo fkInternalCalc, lo cual es normal, porque un proveedor no proporciona valores para campos que solamente existen del lado cliente. El problema es que después de varias llamadas al método AppendData de una misma instancia TClientDataSet, los campos InternalCalc de los registros agregados, que deberían estar en blanco (propiedad IsNull regresando True), aparecen con valor (un 0 para los de tipo Integer y valores que suelen producir excepciones en campos que requieren transformación como TDateTimeField). A los campos InternalCalc, en esos registros recientemente agregados, MIDAS "olvida" asignar cierta bandera especial para señalarlos como carentes de valor (nulos). Hace tiempo elaboré una "corrección" a esta circunstancia, para que toda llamada a AppendData haga que los campos InternalCalc de los registros nuevos tengan esa bandera debidamente asignada. Esto en Delphi 7 y revisado ya en la versión 2007. No he tenido oportunidad de probarla en versiones posteriores, por lo cual recurro a su amable disposición para asegurar que esto compile y funcione en tales versiones. No le había dado demasiada importancia hasta que hace algunas semanas me contactó un colega de Polonia planteando la necesidad de una solución en Delphi 2010 (descubrí que no soy el único que ha hecho AppendData con campos InternalCalc :p). Al final de este mensaje aparece un pequeño proyecto Delphi. Pueden descargarlo, descomprimirlo y ejecutarlo en las versiones más recientes que tengan, todo lo que hay que hacer es oprimir un botón varias veces. Les estaré agradecido. :) El siguiente es el código de la solución (incluido en el archivo anexo). Lo escribí hace tiempo como parte de Magia Data, pero he logrado aislar lo que concierne solamente a lo planteado aquí.
Ojalá no tenga mayores problemas en las tres o cuatro versiones más recientes de Delphi. Muchas gracias. Al González. Última edición por Al González fecha: 25-12-2012 a las 05:39:19. |
#2
|
||||
|
||||
No tengo versiones más modernas de delphi, pero me apunto a este tema para seguirlo
Por cierto, me parece un trabajo extraordinario. |
#3
|
||||
|
||||
Pues acabo de probarlo en Delphi XE2 y a la tercera pulsación aparece el cero en los campos calculados. Eso si, ha compilado a la primera
Un saludo |
#4
|
||||
|
||||
Muchas gracias, ElKurgan. Eso quiere decir que la anomalía sigue presente en las últimas versiones de MIDAS (asumo que usas el propio MIDAS.dll / MIDASLib.dcu de Delphi XE2).
Bien, notarás que la rejilla del lado derecho muestra los resultados de la misma operación, pero aplicando el parche. Por lo tanto en ella no deben aparecer esos ceros, ¿podrías confirmarlo? Saludos. |
#5
|
||||
|
||||
Confirmado. En la derecha aparece correctamente
Espero haberte ayudado. Un saludo |
#6
|
||||
|
||||
Sí, bastante. Muchas gracias.
Queda esto para quien pueda necesitarlo. |
#7
|
|||
|
|||
Hola Al González
Cita:
Saludos novato_erick |
#8
|
||||
|
||||
Mil disculpas, Erick. Hace poco se saturó mi cuota de archivos adjuntos y creo que borré por accidente el ZIP que había anexado al primer mensaje.
Acabo de poner ese proyecto en el FTP del club para mayor facilidad de descarga: http://terawiki.clubdelphi.com/Delph...a_NullFlag.zip Por cierto, esta mejora está también en el componente TghClientDataSet. De hecho de ahí proviene. |
#9
|
|||
|
|||
Agradezco tu ayuda Al... Personas como usted hacen recordar el verdadero valor de amar nuestra profesión.....
Saludos novato_erick |
#10
|
||||
|
||||
Un placer, Erick.
No estaría mal que nos compartieras algo de contexto sobre lo que andas haciendo con MIDAS. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema: "Falta el elemento Raiz" Delphi 2007 | edgar_vife | Varios | 14 | 06-05-2015 18:45:21 |
"Escépticos" Buena TV Española... pero como que le falta | AzidRain | La Taberna | 9 | 06-01-2011 03:23:41 |
Solución a "el programa ha generado errores y debe cerrarse" | Lepe | Varios | 2 | 25-09-2008 10:28:42 |
Solución para el error "Field ID not found" | Calderin | Conexión con bases de datos | 5 | 24-11-2004 11:18:26 |
Error aplicacion corba "no se puede abrir midas.idl" | CORBATIN | Providers | 0 | 25-08-2004 14:37:37 |
|