![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
OnValidate para Integer devuelve 0
El segundo problema es que en el mismo evento onvalidate, los campos de tipo integer i smallint siempre devuelven 0 cuando se accede a su valor para proceder a su validación.
El siguiente evento conectado a campos de diferentes tipos e introduciendo siempre el valor ‘100’, devolvería el siguiente resultado: Validate: SMALLINT: 0 Validate: INTEGER: 0 Validate: BIGINTEGER: 100 Validate: FLOAT: 100 Validate: NUMERIC: 100 Validate: CHAR_5: 100 Validate: VARCHAR_10: 100 Sobra decir que si utilizamos Firedac el resultado es el correcto, por lo que para investigar hemos tratado de comparar el comportamiento de los dos sistemas. Parece ser que el problema se origina en el siguiente procedimiento de la unidad Data.DB debido a que la variable FValidating siempre es False cuando procede de FibPlus
Investigando a quien corresponde la responsabilidad de mantener el valor de la variable FValidating nos encontramos con que en Firedac, se ejecuta el siguiente código(uno u otro en función del parámetro Buffer)
Mientras que en los Fibs el trabajo equivalente lo realiza el siguiente procedimiento de la unidad FIBDataset, que no tiene en cuenta la variable FValidating, ya que utiliza un sistema diferente para controlar el estado de validación del campo
Llegados a este punto desearía conocer algunas opiniones y si os parece acertado o no el razonamiento que hemos hecho. Soluciones??? Nosotros proponemos una pequeña modificación en TFIBCustomDataSet.DoFieldValidate de los fibs, introduciendo 3 linieas de código en el inicio del evento para que quede tal que así:
De esta forma, el tratamiento de los campos integer lo delegamos al mismo procedimiento que usan los Firedac, y el resto de tipos de campos que no presentan error se siguen tratando igual que hasta ahora. Que os parece?? Gracias por aguantar el rollo …. Saludos a todos |
|
#2
|
||||
|
||||
|
Gracias por compartirlo.
No he tenido oportunidad de probarlo, a ver si puedo dedicarle un poco de tiempo ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
|||
|
|||
|
Solución propuesta
Siguiendo la solución de manelb, he implementado esta versión un poco más simple. En lugar de diferenciar si el campo es TIntegerField o no, podemos hacerlo de la siguiente forma:
Llamamos al método Field.Validate para actualizar el estado de la variable FValidating siempre (sea o no un IntegerField) y de paso conservamos las asignaciones que hace el TFIBCustomDataSet.DoFieldValidate. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| FibPlus en Delphi XE5 | eibarra | Conexión con bases de datos | 2 | 12-08-2014 11:09:54 |
| Delphi 2010 + FIBPlus 6.9.6 + Campos Memo | guillotmarc | Conexión con bases de datos | 4 | 29-03-2010 23:04:17 |
| FibPlus para Delphi 2009 | miado | Conexión con bases de datos | 3 | 12-01-2009 15:37:56 |
| FIBPlus | emeritos | Lazarus, FreePascal, Kylix, etc. | 3 | 19-06-2004 17:56:40 |
| FibPlus | Malon | Conexión con bases de datos | 4 | 22-04-2004 02:41:49 |
|