FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Fibplus y Delphi 10.2
Hola a todos
Tengo escrita una aplicación desarrollada con Delphi 2006 que accede a una base de datos Firebird 2.1.5 utilizando los componentes Fibplus 6.4.1. Hace varios años que esta aplicación está cumpliendo estupendamente con su cometido. Ahora bien, me han pedido compilar esta aplicación con Delphi 10.2.3 Community Edition y los componentes Fibplus 7.632.3171 Release descargados de internet. Al ejecutar la aplicación y dar de alta o modificar registros de la BD aparece incansablemente el mensaje de error 'Access violation...'. Ejecutando la aplicación en modo de depuración me doy cuenta que estos errores tienen su origen en el código fuente de los componentes Fibplus. Alguien puede decirme si la versión Fibplus 7.632.3171 es compatible con Delphi 10.2.3 ? O dicho de otra forma, existe alguna versión Fibplus compatible con Delphi 10.2.3, o hay que olvidarse de Fibplus y utilizar FireDAC ? Gracias. |
#2
|
||||
|
||||
Mira los enlaces de abajo del todo, a ver si te sirven.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
He seguido los enlaces que me has pasado...hasta llegar a la web https://github.com/madorin/fibplus.
Ese grupo de voluntarios que se ha propuesto mantener vivos a los Fibplus está realizando una gran labor sobretodo por la gran dificultad que representa tener que adaptar código fuente escrito por otros. Por lo que entiendo estas versiones de Fibplus no son del todo seguras ya que siguen apareciendo mensajes de error en las aplicaciones que las usan. El compañero que me pasó la versión Fibplus que tengo instalada con Delphi 10.2 me comenta que los bajo de esta web con el distintivo D25. Por ahora no veo seguro migrar a esta versión de FibPlus la aplicación que te comenté. Seguiré buscando información... Gracias por los enlaces. |
#4
|
|||
|
|||
Dos problemas con OnValidate
Saludos a todos…
Primero que nada, comentar que no soy un experto programador, ni mi ocupación directa sea esta, pero voy a intentar aportar mi granito de arena para ayudar a solucionar este problema. Por lo tanto, ruego comprensión si la terminología empleada no es la más adecuada y sobre todo por la falta de rigurosidad técnica en mi exposición. También es cierto que me ha sorprendido la poca participación en este hilo, bien porque realmente seamos pocos los usuarios de FIBs, o pocos de nosotros lo estemos intentando con las nuevas versiones de Delphi. En referencia al problema, parece ser que realmente son dos, pero que se producen o están relacionados directamente con el evento onvalidate de TField. Incluso el origen del problema podría ser el mismo, aunque no hemos podido llegar a esta conclusión. Me han iluminado, entre otros, unos hilos del foro de Al González hablando sobre SetData, Validate, GetData y sobre los tipos de parámetros de algunos procedimientos que han cambiado de Pointer a TValueBuffer en las últimas versiones de Delphi. También largas explicaciones de Casimiro sobre Unicode, que sigue costándome entender. Como creo que me voy a extender un poco, mejor pongo cada uno de los dos problemas en mensajes separados. Última edición por manelb fecha: 28-04-2019 a las 13:02:59. |
#5
|
|||
|
|||
Access Violation
El primero de ellos es un error que está registrado en la propia página de descarga de los componentes en github y que adjunta un pequeño ejemplo con base de datos incluida
https://github.com/madorin/fibplus/issues/30 El error consiste en un extraño y aleatorio “Access Violation”. Se produce, bien al validar el campo, bien al hacer post del registro o bien al salir de la ventana. Parece ser, por las pruebas que hemos realizado, que sucede cuando en el evento onvalidate se utiliza el acceso al valor del campo validado usando la sentencia Sender.AsString. En las pruebas realizadas hemos apreciado que si utilizamos Sender. AsAnsiString en lugar de Sender.AsString ya no se produce el error y de momento este apartado lo damos por solucionado. Quiero creer que no vamos a tener ningún problema con Unicode siempre que no utilicemos otros idiomas. Los expertos en Unicode me podríais confirmar este punto?? |
#6
|
|||
|
|||
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 |
#7
|
|||
|
|||
He actualizado de XE2 a 10.3 y estoy empezando a tener problemas con FIBPlus. Salta un access violation cada vez en un punto distinto del código fuente al trabajar con strings, pero tanto con AsString como con AsAnsiString así que por aquí voy más perdido. ¿Seguís trabajando con estos componentes? ¿Con la versión que hay en GitHub?
|
|
|
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 |
|