Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema extraño dBase

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema extraño dBase Responder citando

Hola tengo un problema realmente extraño al utilizar dBase. Creo un tabla de esta forma:

try
{
table= new TTable(this);
table->DatabaseName="prueba"; //Alias
table->TableName=NombreTabla; //nombre tabla y extensión

table->FieldDefs->Clear();
TFieldDef *pNewDef = table->FieldDefs->AddFieldDef();

pNewDef->Name = "LOGGER";
pNewDef->DataType = ftInteger;
pNewDef->Required = true;

pNewDef = table->FieldDefs->AddFieldDef();
pNewDef->Name = "NAME";
pNewDef->DataType = ftString;
pNewDef->Size = 20;
pNewDef->Required = true;

table->CreateTable();
..................

Funciona correctamente casi siempre, pero si antes de crear realizo un procedimiento determinado (consiste en conectar con una bd ya creada anteriormente), cuando voy a crear una nueva tabla me la crea con los nombres de los campos recortados a 10 carácteres, y me coloca un "_" entre los espacios en blanco.

¿Alguna idea de qué está pasando?
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Anque no lo entiendo, parece que podría estar relacionado con la particularidad del funcionamiento de dBase, la cual trunca los nombres de los campo si estos no caben. Mi problema podría estar relacionado aunque el tamaño de mis campos es correcto siempre.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Efectivamente: En dBase el nombre del campo tiene limitación tanto en tamaño como en estructura y no admite espacios en blanco. ¡Anda que no habremos luchado para definir los nombres de las tablas los que empezamos a programa en Clipper!
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Pero no estoy de acuerdo totalmente con eso. Pues yo hago funcionar la tabla con nombres largos y espacios funcionando aparentemente bien. El problema es cuando realizo la operación que indico arriba, y ahí es donde empiezan a ocurrir esos problemas. Algo no acabo de entenderlo.
Te resumo el proceso:
1º Creo el alias.
2º Creo la tabla dBase.
3º La relleno.
En este momento puedo realizar cualquier cosa con ella y no da problemas.

El problema aparece cuando:
1º Conecto con una base de datos ya creada.
2º Creo el alias.
3º Creo la tabla dBase. (Aquí es donde al crearla los campos me los limita a 10 carácteres) La función de crear la tabla es la misma que la utilizada anteriormente y que funciona bien.

No entiendo nada.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola rauls66, debes verificar que las tablas que estas creando con la herramienta que estas utilizando sean realmente dbase, pues yo tengo conociendo de solo tres versiones de dBASE
Cita:
dBASE for Windows
dBASE IV
dBASE III+

En las tres tienen la limitación que te menciona Angel, pues así es en dBASE.
Lo que puede estar ocurriendo, es que las tablas que estés generando-creando con la herramienta que utilizas sean de tipo FOXRPO.
Deberias probar con "Database Desktop" que esta incluida en CB4 - CB5 - CB6.
saludos tor
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Raúl: Comprueba un cosa. En tu planteamiento
Cita:
1º Creo el alias.
2º Creo la tabla dBase.
3º La relleno.

Entre el segundo y el tercer paso haz esto: Cierra la base de datos, ábrela y comprueba las tablas antes de introducir datos.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Eso ya lo hago aunque no lo haya puesto. Siempre cierre la base después de usarla. Y todo está bien excepto cuando se crea incorrectamente con CreateTabla.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Tor, ahora sí que me he perdido. Yo para crear la base en dBase creo el alias con driver dBase y luego creo una tabla con CreateTable() a la cual le pongo la extensión dbf. ¿No es así la forma correcta de crearlas?
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Puedes crear una tabla desde código o utilizando alguna herramienta
Desde código, es como tu estas realizando. El siguiente codigo que expongo es el help de CB6

Código:
//The following example shows how to create a table.

Table1->Active = false; // The Table component must not be active

Table1->DatabaseName = "BCDEMOS";
Table1->TableType = ttParadox;

Table1->TableName = "CustInfo";

if (!Table1->Exists) // Don't overwrite an existing table

{

  // describe the fields in the table

  Table1->FieldDefs->Clear();
  TFieldDef *pNewDef = Table1->FieldDefs->AddFieldDef();
  pNewDef->Name = "Field1";
  pNewDef->DataType = ftInteger;

  pNewDef->Required = true;

  pNewDef = Table1->FieldDefs->AddFieldDef();

  pNewDef->Name = "Field2";
  pNewDef->DataType = ftString;

  pNewDef->Size = 30;

  // Next, describe any indexes

  Table1->IndexDefs->Clear();
  /* the 1st index has no name because it is a Paradox primary key */
  Table1->IndexDefs->Add("","Field1", TIndexOptions() <<ixPrimary <<ixUnique>IndexDefs->Add("Fld2Index","Field2", TIndexOptions() <<ixCaseInsensitive>CreateTable();
}
en la linea
Código:
  Table1->TableType = ttParadox;

Es donde debes especificar el tipo.
Esto esta en el help sobre TableType.
Código:
Value   Meaning

ttDefault   (Default) Determine table type based on file extension for the table.
ttParadox   Table is a Paradox table.
ttDBase   Table is a dBASE table.
ttFoxPro   Table is a FoxPro table.
ttASCII   Table is a text file with comma-delimited, quoted strings for each field

If TableType is set to ttDefault, the table's file-name extension determines the table type:

Extension   Meaning

DB or none   Paradox table
DBF   dBASE table
TXT   ASCII table

If TableType is ttParadox, ttDBase, ttFoxPro or ttASCII, the table type is assumed to be of the type specified, regardless of the table’s file name extension.


saludos
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Bueno Tor, ahora no estoy en el trabajo pero lo que has puesto no lo sabía. Yo no especifico nada con lo cual supongo que está cogiendo realmente el formato PARADOX por defecto. Mañana lo probaré pero seguramente por eso no me limitaba a 10 carácteres y otras sí.
En principio doy el asunto por cerrado.
Gracias a todos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Bueno probé indicar el tipo de base de datos como dBase pero el problema sigue igual. La primera vez que la creo acepta más de 10 carácteres en el nombre del campo.

Como solución de emergencia limité a 10 carácteres y se acabó.
Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.