Ver Mensaje Individual
  #9  
Antiguo 26-07-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 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