![]() |
Definir campo en dbase num(1,0) / ftBCD
Hola a todos y enhorabuena por este magnifico foro.
Mi primera pregunta. Estoy generando la estructura de una tabla dBase en Delphi. Tengo que generar campo de tipo Number. Lo hago de esta forma: (con el formato ftBCD en Size se pone el numero de decimales y en precision la longitud total de dígitos.) with AddFieldDef do begin Name := 'Asien'; DataType := ftBCD; Size := 0; Precision := 6; end; Con esto generaría un Num (6,0) Pero tengo un problema necesito generar un num(1,0) y pongo esto with AddFieldDef do begin Name := 'Campo'; DataType := ftBCD; Size := 0; Precision := 1; end; Mi sorpresa es que cuando consulto con el Database Dektop el campo veo que me lo crea con longitud 20 y decimales 4, Sabeis por que sucede esto? Y como puedo solucionarlo? PD: la estructura debe ser definida de esta forma, viene dada por un famoso fabricante de programa de contabilidad que funciona sobre de Dbase. Muchas gracias. |
Aunque te hablo de memoria, sino recuerdo mal en Dbase el ancho del campo es contando la coma y los decimales por ejemplo ancho 3 y 1 decimal=1,5
tres posciones 2 números más la coma. Prueba así a ver y nos cuentas: with AddFieldDef do begin Name := 'Campo'; DataType := ftBCD; Size := 2; Precision := 1; end; Espero te sirva. |
Gracias por la respuesta,
Nada, no funciona, pone Size 20 y dec 4, creo que es el máximo porque cuando no especificas precision ni size es lo que pone. Por ejemplo si quiero un numerico de 5 digitos y 2 decimales pongo y funciona perfectamente with AddFieldDef do begin Name := 'Campo'; DataType := ftBCD; Size := 2; Precision := 5; end; |
Os cuento mas pruebas
Si pongo: with AddFieldDef do begin Name := 'TCasado'; DataType := ftBCD; Size := 0; Precision := 2; end; Lo genera prefectamente. Si pongo: with AddFieldDef do begin Name := 'TCasado'; DataType := ftBCD; Size := 2; Precision := 5; end; y luego en el campo (directamente en el DB Desktop) introduzco el valor 236,23 -> se convierte en 236,20 16,24 -> se convierte en 16,24 12345,62 -> se convierte en 12346,00 |
Sigo haciendo pruebas..
Si pongo Precision: 1, size: 0 --> 20, 4 , Precision: 1, size: 1 --> 20,4 , Precision: 2, size: 1 --> Error Invalid field descriptor Creo que lo que pasa es que por lo menos tenemos que definir dos de precsion porque la coma cuenta tambien. Cualquier pista, ayuda sera bienvenidad necesito crear el campo numeric 1,0 !!!! GRacias. |
Ya sé que ha llovido mucho desde que hiciste tu consulta. Pero he tenido tu mismo problemas y navegando había llegado hasta aquí. Y como posteriormente he dado con una solución, aquí la dejo. Más vale tarde que nunca. :D
Pues resulta que, al menos en el formato dBase III+, utilizando AddFieldDef no deja crear un campo binario, es decir, num(1,0). ¿Solución? Lo creamos, como num(2,0) y, una vez creada la tabla, abrimos el archivo y reescribimos la longitud deseada.
|
La franja horaria es GMT +2. Ahora son las 08:06:36. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi