Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-04-2007
DavidLM2007 DavidLM2007 is offline
Registrado
NULL
 
Registrado: abr 2007
Posts: 6
Poder: 0
DavidLM2007 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 26-04-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
NULL
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 26-04-2007
DavidLM2007 DavidLM2007 is offline
Registrado
NULL
 
Registrado: abr 2007
Posts: 6
Poder: 0
DavidLM2007 Va por buen camino
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;
Responder Con Cita
  #4  
Antiguo 26-04-2007
DavidLM2007 DavidLM2007 is offline
Registrado
NULL
 
Registrado: abr 2007
Posts: 6
Poder: 0
DavidLM2007 Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 27-04-2007
DavidLM2007 DavidLM2007 is offline
Registrado
NULL
 
Registrado: abr 2007
Posts: 6
Poder: 0
DavidLM2007 Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo Hace 1 Semana
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 17
Jose_Pérez Va por buen camino
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.

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.

Código Delphi [-]

With AddFieldDef Do
     begin
     Name:= 'Campo';
     DataType:= ftBCD;
     Size:= 0;
     Precision:=2;
     end;

Tabla.CreateTable;

// Posición es la que ocupa el campo en la descripción de la estructura de la tabla.
SetLengthBinary('c:\NombreTabla.dbf',Posicion);

Código Delphi [-]
procedure TfrmEstructura.SetLengthBinary(dbFile: String; PosicionCampo: Integer);
const
  Value: Byte=1;
var
  F: File of byte;
begin

  AssignFile(F,dbFile);
  Reset(F);
  Seek(F,(PosicionCampo*32)+16);
  Write(F,Value);
  CloseFile(F);

end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Definir impresora Carliviris Varios 6 11-01-2008 03:12:17
Campo clave en DBase!!!!! EfrainSanmiguel Conexión con bases de datos 7 14-12-2005 17:27:31
Definir formula en campo oncalculated ANXO Conexión con bases de datos 4 13-10-2005 20:39:34
Como definir un campo Memo manuelpr Conexión con bases de datos 4 12-04-2005 20:01:45
Definir columnas dbgrid Letty Conexión con bases de datos 3 15-12-2003 20:04:57


La franja horaria es GMT +2. Ahora son las 10:48:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi