Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 08-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El tipo Number en Paradox corresponde al campo Float y Dbase III+ no tiene campos de punto flotante. Si te fijas ni siquiera el Database Desktop lo puede hacer:

New table|DBase III+|Borrow... (desde una tabla Paradox)

y sucederá lo mismo que ya has visto, aparecen los campos pero sin tipo de datos.

Esto no necesariamente quiere decir que no se pueda hacer la exportación. Lo que sucede es que el único tipo de datos numérico (enteros o con decimales) que acepta DBase III+ es NUMBER que no es otra cosa que un BCD y los BCD sólo aceptan un número fijo de decimales. Como en un tipo de datos Float no hay forma inherente de determinar cuántos decimales maneja (por algo es punto flotante), utilerías como el Database Desktop no tienen forma de saber cuántos especificar para hacer la conversión.

Sin embargo, a menos que trabajes con cálculos de precisión astronómica , es muy posible que puedas saber de antemano el número máximo de decimales que vas a tener en tu tabla Paradox.

Si por ejemplo, sabes que tus valores tendrán un máximo de 3 decimales con una precisión de 7 (es decir 7 es el mayor número de digitos contando parte entera y parte decimal) entonces puedes usar un campo NUMBER (BCD) especificando 7 como precisión y 3 como decimales (quizá debas especificar 9 en lugar de 7 ya que creo que DBase requiere dos dígitos para almacenar el punto y el signo).

Ya en la práctica, lo que haría es definir yo mismo la estructura de la tabla destino usando un TTable y añadiendo los correspondientes TFieldDef.

Un campo de Paradox como el descrito antes lo especificaría así:

Código Delphi [-]
with TablaDbase do
begin
  DatabaseName := tu alias;
  TableName := nombre de la tabla;

  with FieldDefs.Add do
  begin
    Name := nombre del campo;
    DataType := ftBCD;
    Precision := 7 ; // ¿9?
    Size := 3;
  end;

  {
    otras definiciones de campo
  }
  end;

  CreateTable;
end;

Ya con la estructura definida puedes usar el BatchMove para hacer la transferencia.

------------------

Nota además que éste tipo de datos (Number en Paradox) no es ni con mucho el único que te va a dar problemas. Money, LongInt, AutoInc, todos esos tendrás que tratarlos según el caso. Creo que el único que no da lata es el Short. En todos los casos tendrás que determinar tú mismo la mejor forma de colocarlos en un NUMBER (BCD) de DBase.

También claro, te causarán problemas los campos Time y TimeStamp; DBase III+ sólo acepta Date (¿en qué estarían pensando los diseñadores de DBase? ) que supongo que tendrás que almacenar como cadenas (campo CHARACTER en DBase) y ni que decir de Graphic, Binary, Bytes, Ole, etc. pues no veo forma de almacenar binarios en DBase III +. Los únicos tipos de datos en DBase son

CHARACTER
NUMBER
DATE
LOGICAL
MEMO

La única forma que veo de guardar datos binarios en DBase III+ es haciendo una codificación de binario a ASCII; no me preguntes cómo porque no sé pero si el correo electrónico lo puede hacer...

Moraleja: ¿Es realmente necesario que exportes a DBase?

------------------

Otra cosa: ¿por qué el requerimiento de usar SQL? Las bases de datos de escritorio como Paradox y DBase no están hechas para SQL. A no ser que sea muy necesario yo prefiero usar TTable en lugar de TQuery ya que el rendimiento es mucho mejor.

// Saludos
Responder Con Cita
 


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


La franja horaria es GMT +2. Ahora son las 16:18:39.


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