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 

Problemas de lectura (BD - Access)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas de lectura (BD - Access) Responder citando

Hola. Tengo una tabla en una BD MSAccess definida de la siguiente manera:
- ID (autonumérico)
- X (decimal, con precisión=2 y escala=0)

Esto me permite tener un registro en la tabla tal como éste:
(ID = 1, X = -1)

Bien, el caso es que cuando accedo a través de componentes ADO y leo este registro me dice que la X vale 1!! (y no -1), mientras que si lo hago con componentes TDatabase me va bien.

A través de ADO
===========
Tengo un TADOConnection y un TADOQuery.
El código que utilizo para la lectura es el siguiente:
Código:

  AnsiString connectionString;

  connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\\Mis Documentos\\DBSamples\\prueba.mdb";
  ADOConnection1->ConnectionString = connectionString;
  ADOConnection1->Open();
  ADOQuery1->Connection = ADOConnection1;
  ADOQuery1->SQL->Add("SELECT X FROM PRUEBA");
  ADOQuery1->Open();
  ADOQuery1->First();
  AnsiString a = ADOQuery1->FieldByName("X")->AsString;


Y con todo esto el valor de a vale "1".

A través de TDatabase
================
Tengo un TDatabase y un TQuery.
El código que utilizo para la lectura es el siguiente:
Código:

  CreateODBCAlias("valeron", "PRUEBA.mdb", "E:\\Mis Documentos\\DBSamples", "Mucha mucha suerte");
  Database1->DatabaseName = "valeron";
  Query1->SQL->Clear();
  Query1->SQL->Add("SELECT X FROM PRUEBA");
  Query1->DatabaseName = "valeron";
  Query1->Active = true;
  Query1->First();
  AnsiString a = Query1->FieldByName("X")->AsString;
  RemoveODBCAlias("valeron");


Y con todo esto el valor de a vale "-1".

* Las funciones CreateODBCAlias y RemoveODBCAlias las copié de algún post de este foro y funcionan bien.

* He probado con muchísimos cambios: todas las posibilidades de AsFloat, AsInteger, AsString, etc., cambiando el connectionstring que uso con ADO, etc. pero siempre funciona mal.

Lo que necesito es hacer que esto funcione con ADO porque tengo una aplicación muy grande escrita con componentes ADO y no voy a cambiarlo todo.

Si alguien puede ayudarme lo agradezco mucho.

Un saludo para todos y que no se pierda nunca la ilusión por programar!! Very Happy
Volver arriba
Mensaje    Asunto: Responder citando

No sé si será por esto, pero si el campo X es un decimal (float) en tu tabla de la BD Access en lugar de acceder al valor mediante AsString podrías probar accediendo mediante AsFloat. De todos modos te aconsejo que cuando utilices decimales en Access en lugar de poner el campo con formato float lo pongas con double. Así he evitado muchos problemas de cálculo. Sea double o float desde builder se accede con AsFloat.

Lo dicho, sólo es una sugerencia.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Gracias por el interés shackletta, pero como ponía en la última parte de mi post ya he probado con prácticamente todas las posibilidades de AsFloat, AsString, etc. y no funciona.
Volver arriba
Mensaje    Asunto: Responder citando

Lo siento, pero lo leí demasiado rápido tu post y no me fijé en la parte que ponías que habías probado con todo. De todas maneras, has probado a poner en Access ese campo como Doble en lugar de Simple??
Volver arriba
Mensaje    Asunto: Responder citando

Vale, era yo, es que estoy en la universidad y he olvidado identificarme.

Un saludo y suerte
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.