Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Problema al obtener datos de MsAccess con componentes SQLdb nativos

Hola, tiempo sin escribir, el problema que me ocupa y culpable de al menos 2 canas nuevas es el siguiente:

tengo una(s) base(s) de datos con varias tablas cada una(70 bd a razon de 4 tablas cada una), es una aplicación legada la idea es migrar todo a un esquema de datos mas optimo, (por ejemplo todo eso se resume a una sola bd y 3 tablas maximo) hasta ahora el proceso a tenido varios inconvenientes pero el ultimo ... caramba, resulta pues que un campo de las tablas es de tipo doble(en access) con su asignación decimal en automatico etc, esto conlleva que puede almacenar números: 13455 23564,45 523,2
pues bien el problema es que cuando los capturo con
Código Delphi [-]
tabla.FieldByName('campo').AsFloat
me devuelve 13,46 235,64 52,32 respectivamente , como comprenderan nada bien, me urge resolverlo .....

unos comentarios posteriores,
no puedo cambiar nada en las bases de datos originales
no puedo migrar las bd con una aplicacion especializada
en realidad estoy utilizando lazarus con los componentes SqlDB nativos

Gracias se que me podran ayudar ....
Responder Con Cita
  #2  
Antiguo 25-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Tambien con delphi

Acabo de probar con delphi y es exactamente el mismo problema .....
Responder Con Cita
  #3  
Antiguo 25-07-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Kenobi.

Sería muy bueno si pudieras adjuntar parte de una de las tablas, que contenga algunas filas no significantes pero con alguna columna que arroje ese resultado, como para poder probar.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 25-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Claro ni mas faltaba

Acá va una versión simplificada de una de las bases de datos con una tabla ....

gracias por tu atención .....
Archivos Adjuntos
Tipo de Archivo: zip bd.zip (51,6 KB, 5 visitas)
Responder Con Cita
  #5  
Antiguo 25-07-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Kenobi.

Probé la tabla con ADO y no me sucede, el código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  tb: TADOTable;
begin
  tb:= ADOTable1;
  tb.First;
  tb.DisableControls;
  try
    while not tb.Eof do
    begin
      ListBox1.Items.Add(FloatToStr(tb.FieldByName('PrimerSubTotal').AsFloat));
      tb.Next;
    end;
  finally
    tb.EnableControls;
  end;
end;

Salida:


Tal vez sean los componentes ¿ Cuales estás usando ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 25-07-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Voy a tirar un par de items para que revises a ver si con alguno le encontras la vuelta:

1. revisar la configuracion regional. Deberia coincidir con el formato del campo de la bd access
2. desde delphi utilizar alguna funcion para darle el formato que necesitas al numero (FormatFloat por ejemplo)
3. Que pasa si usas en ves de Field.AsFloat, Field.AsCurrency? Field.Value???
Responder Con Cita
  #7  
Antiguo 26-07-2015
Kenobi Kenobi is offline
Miembro
 
Registrado: mar 2007
Posts: 191
Poder: 18
Kenobi Va por buen camino
Resuelto

Estoy avergonzado por molestarlos con algo que al final fue error mio, como mencione en el primer post son muchas bases de datos y muchas tablas en cada una, pues resulta que las mas actualizadas se les reformateo el valor en cuestión luego no coincide con su valor en bd anteriores, todo un problema nuevo para afrontar en la migración, por cuanto doy por cerrado esta mi duda ya que el speudo bug no existia en realidad, o no era propio de lazarus era de las tablas y sus datos ...

Mil disculpas y agradezco el tiempo invertido.....
Responder Con Cita
  #8  
Antiguo 26-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tendrás que cumplir una penitencia
Responder Con Cita
  #9  
Antiguo 26-07-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Kenobi,

Cita:
Empezado por Kenobi
...Problema al obtener datos de MsAccess con componentes SQLdb nativos...resulta pues que un campo de las tablas es de tipo doble...esto conlleva que puede almacenar números: 13455 23564,45 523,2...me devuelve 13,46 235,64 52,32 respectivamente...


Revisa este código:
Código Delphi [-]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, db, sqldb, odbcconn, mssqlconn, FileUtil, Forms, Controls,
  Graphics, Dialogs, DBGrids, StdCtrls, ShellApi;

type

  { TForm1 }

  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    Button1: TButton;
    ODBCConnection1: TODBCConnection;
    SQLTransaction1: TSQLTransaction;
    SQLQuery1: TSQLQuery;
    DataSource1: TDataSource;
    procedure Button1Click(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
   Form1: TForm1;
   CRLF : Array [0..1] of Char = (#13,#10);

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin

   ODBCConnection1.Driver := 'Microsoft Access Driver (*.mdb, *.accdb)';
   ODBCConnection1.Params.Add('DBQ=D:\DB\Access\bd.mdb');
   ODBCConnection1.Connected := True;
   ODBCConnection1.KeepConnection := True;

   SQLTransaction1.DataBase := ODBCConnection1;
   SQLTransaction1.Action := caCommit;
   SQLTransaction1.Active := False;

   SQLQuery1.DataBase := ODBCConnection1;
   SQLQuery1.UsePrimaryKeyAsKey := False;

   SQLQuery1.Close;
   SQLQuery1.SQL.Text := 'Select * from Tabla';
   SQLQuery1.Open;

   DataSource1.DataSet := SQLQuery1;

   DBGrid1.DataSource := DataSource1;
   DBGrid1.Columns.Items[0].Width:= 100;
   DBGrid1.Columns.Items[1].Width:= 300;
   DBGrid1.Columns.Items[2].Width:= 100;
   DBGrid1.ReadOnly := true;

end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
   C1 : Integer;
   C2 : String;
   C3 : Double;
   Data : String;

begin

   C1 := DBGrid1.Columns.Items[0].Field.AsInteger;
   C2 := DBGrid1.Columns.Items[1].Field.AsString;
   C3 := DBGrid1.Columns.Items[2].Field.AsFloat;

   Data := Format(' Codigo = %d %s PrimerLapso = %s %s PrimerSubTotal = %g ',[C1, CRLF, C2, CRLF, C3]);

   MessageDlg('Data', Data, mtinformation,[mbok],0);

end;


end.
El código anterior en Lazarus Versión 1.4.0 FPC 2.6.4 sobre Windows 7 Professional x32, Realiza una consulta de la BD del Msg #4 en MS Access por medio de los componentes de acceso de datos SQLdb, como se muestra en la siguiente imagen:



Cita:
Empezado por Kenobi
...al final fue error mio...son muchas bases de datos y muchas tablas ...resulta que las mas actualizadas se les reformateo el valor en cuestión luego no coincide con su valor en bd anteriores...


Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 26-07-2015 a las 11:41:36.
Responder Con Cita
  #10  
Antiguo 26-07-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Kenobi Ver Mensaje
Estoy avergonzado por molestarlos con algo que al final fue error mio, como mencione en el primer post son muchas bases de datos y muchas tablas en cada una, pues resulta que las mas actualizadas se les reformateo el valor en cuestión luego no coincide con su valor en bd anteriores, todo un problema nuevo para afrontar en la migración, por cuanto doy por cerrado esta mi duda ya que el speudo bug no existia en realidad, o no era propio de lazarus era de las tablas y sus datos ...

Mil disculpas y agradezco el tiempo invertido.....
Ni lo menciones, son cosas que pasan cuando uno lidia con tanto dato y encima ajeno. Me alegra que lo hayas solucionado .

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



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
usando componentes SQLdb error al Insertar registros IVAND Lazarus, FreePascal, Kylix, etc. 2 28-03-2015 19:37:59
Componentes nativos para iOS gratuitos DarkDudae FireMonkey 2 05-07-2013 20:35:59
TMS lanza Componentes nativos para iOS. donald shimoda Noticias 10 03-06-2013 15:40:00
Más componentes nativos útiles para Factura Electrónica México. AzidRain Varios 4 14-12-2010 17:42:49
Sobre los Componentes de MITEC para obtener Datos del Hardware JoAnCa Varios 1 27-03-2009 02:12:27


La franja horaria es GMT +2. Ahora son las 06:01:16.


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