![]() |
![]() |
| 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
|
||||
|
||||
|
Hola.
Casi siempre que encuentro en Delphi algún defecto incómodo (es de esperarse que existan al ser una herramienta de programación tan vasta), como el que explicas, y tal defecto me impide conseguir el objetivo que tengo trazado en el proyecto en cuestión, busco la manera de solventarlo. Primero trato de averiguar si ya existe una aceptación oficial del mismo por parte del fabricante, con su respectivo parche o solución alternativa. De no encontrar solución hecha que me satisfaga, estudio el código fuente de la VCL procurando descubrir la causa (a veces de todas formas hago esto para conocer los detalles del asunto). Ocasionalmente encuentro la razón del fallo, pero también me ha pasado que llego hasta donde el código fuente transfiere el control a una DLL de la que no hay código fuente disponible. Dependiendo de la calidad y claridad de los datos obtenidos, elaboro algún tipo de solución, que a veces resulta elegante y en otros casos una auténtica chapuza. El caso por el que uno cruza los dedos es cuando el defecto en cuestión se localiza en el código fuente de un método virtual (o mensaje), tal método no hace referencia a elementos privados para los cuales no haya cuando menos acceso protegido (clásicos campos "FOnlyForMyEyes") y la clase a la que pertenece dicho método puede ser sustituida para cualquier elemento que haga uso de ella. Cuando es así, puede derivarse una clase hija redefiniendo el método en cuestión, aplicando en él el parche o código que ayude a evitar el defecto. Pero también hay situaciones donde el problema reside en un método estático o función suelta, o el método es virtual y por lo tanto redefinible pero hace montones de referencias a elementos, permítanme la expresión, ultraprivados, y eso complica aplicar un parche sin modificar directamente el código fuente. De cualquier manera, cada caso tiene sus particularidades. Te recomiendo buscar en QualityCentral si este error ha sido ya reportado, en qué estado se encuentra y qué soluciones hay. Y, cuando así prefieras también, estudiar la clase TFmtBCDField, valiéndote del propio depurador de Delphi además del código fuente de la VCL, para tratar de encontrar la causa del problema y con ello ver si es posible implementar una solución. Un saludo. Al González. ![]() |
|
#2
|
|||
|
|||
|
Hola :
En realidad pensé igual en su momento, de hecho llegue a tomar una unit FMTBCD mas reciente, incorporarla, recompilar todas las dependencias y probar, pero eso fue peor. Aunque compiló, luego tuve otro tipo de errores muy raros y preferí revertir todos los cambios que hice. Sin Embargo, encontré la solución al problema. Es un problema del DELPHI, en efecto, pero también es un problema de conceptos matemáticos y como se aplican en este componente: Les explico: Los tipos de dato en la BD SQL SERVER son DECIMAL (18,4). Al traer los campos en los query y cds, etc. Por defecto las propiedades del control estaban mal. Debo mencionar las 3 propiedades mas importantes: DisplayWidth Precision Size Los valores equivocados en estas propiedades, que fueron colocados automáticamente, estaban haciendo que obtuviera errores de "number out of range" o que al tomar la informacion de la BD el numero que aparecía en los controles estaba "cortado". La solución, para este tipo de dato fue tomar los valores de la siguiente manera: DisplayWidth : 23 Precision : 22 Size : 4 Las razones: DisplayWidth es la cantidad de "campos" visibles en un grid, caja de texto, etc. Se necesita un campo adicional para la COMA. en este caso el tipo de dato NUMERIC (18,4) + 1 = 23 posiciones. Precision: Este campo se refiere al numero de CIFRAS SIGNIFICATIVAS. en este caso requiero que sean 18 + 4 = 22 !!!!!! Size : La cantidad de DECIMALES presentes en el dato, es decir 4 !!!!! Con esto, desaparecieron todos los problemas !!!! Espero que esto le pueda servir a alguien más, ya que no se imaginan la cantidad de tiempo y de investigación que me llevó este problema. Saludos ! |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Ayuda con 'range check error' | drykea | Varios | 2 | 20-02-2009 16:36:39 |
| error xsqlda index out of range en ventana login ayuda !!!!!! | manueltp | Firebird e Interbase | 7 | 16-01-2009 04:03:12 |
| Ayuda [ERROR]XSQLDA index out of range ??? | ManuelPerez | Varios | 1 | 14-03-2008 17:31:22 |
| Number is out of range | jlalvarez | Conexión con bases de datos | 4 | 21-06-2007 18:01:13 |
| Number is out of range (TTABLE) | mmateo25v | Conexión con bases de datos | 2 | 02-08-2006 13:29:01 |
|