Solved the problem:

Its in uiblib.pas and uibase.pas:

{$IFNDEF CPU64}
  {$ALIGN ON}
  {$MINENUMSIZE 4}
{$ENDIF}

The MINENUMSIZE should be set always and not only for non-64bit CPUs as the source is compiled using {$mode delphi} - MINENUMSIZE is 1 by default for delphi.

So it should read:
{$IFNDEF CPU64}
  {$ALIGN ON}
{$ENDIF}
{$MINENUMSIZE 4}

Regards
Lukas
(already posted to the UIB-Forum, just for information here...)

Lukas Gradl schrieb:
Another problem occured:

When using UIB with fpc on X86_64 field values are always empty (for strings) or 0 (for integers).

For demonstrating the problem I created the following program:
Failes with: FPC 2.3.1 svn, UIB latest svn, Firebird 2.0, OS Ubuntu 8.04 X86_64
OK with: FPC 2.3.1 svn, UIB latest svn, Firebird 2.0, OS Ubuntu 8.04 i386



program Project1;

{$mode Delphi}{$H+}

uses
  Classes, SysUtils, UIB, UIBLib, UIBDataset;

var IDB: TUIBDataBase;
    ITrans: TUIBTransaction;
    IQuery: TUIBDataSet;

begin
  IDB:=TUIBDataBase.Create(nil);
  ITrans:=TUIBTransaction.Create(nil);
  IQuery:=TUIBDataSet.Create(nil);
  IDB.DatabaseName:='DB.fdb';
  IDB.CharacterSet:=csISO8859_1;
  IDB.LibraryName:='libfbclient.so';
  IDB.UserName:='User';
  IDB.PassWord:='Pass';
  ITrans.DataBase:=IDB;
  ITrans.AutoStart:=false;
  ITrans.AutoStop:=false;
  IDB.Connected:=True;
  ITrans.StartTransaction;
  IQuery.DataBase:=IDB;
  IQuery.Transaction:=ITrans;
  IQuery.SQL.Text:='SELECT "DocID","DocName" FROM "Docs";';
  try
    IQuery.Open;
    IQuery.First;
    while not IQuery.EOF do begin
Writeln('Line found:'+IQuery.Fields[0].AsString+' '+IQuery.Fields[1].AsString);
      IQuery.Next;
    end;
  finally
    if IQuery.Active then IQuery.Close;
    if ITrans.InTransaction then ITrans.RollBack;
    IDB.Connected:=False;
  end;
end.


The DB-definition in Firebird 2.0 is as follows:

CREATE DOMAIN "dm_Key" AS Integer
 DEFAULT 0
 NOT NULL
 CHECK (VALUE>=0)
;
CREATE DOMAIN "dm_TypID" AS Smallint
 DEFAULT 0
 NOT NULL
;
CREATE DOMAIN "dm_Text" AS
VARCHAR(80) CHARACTER SET ISO8859_1
DEFAULT ''
COLLATE DE_DE
;

CREATE TABLE "Docs"(
  "DocID" "dm_Key" DEFAULT 0,
  "DocType" "dm_TypID" DEFAULT 0,
  "DocName" "dm_Text",
  PRIMARY KEY ("DocID")
);

INSERT INTO "Docs" ("DocID","DocType","DocName") VALUES (1,2,'DocNameTest');


When executed the output should be:

Line found: 1 DocNameTest


but instead you will get:

Line found: 0


Anyone an idea how to proceed?

regards
Lukas


--

----------------------------
software security networks
Lukas Gradl <lazarus#ssn.at>
Eduard-Bodem-Gasse 9
A - 6020 Innsbruck
Tel: +43-512-214040-0
Fax: +43-512-214040-21
----------------------------
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to