Recent

Author Topic: TlargeIntField set filter error  (Read 574 times)

zhangshelly

  • New Member
  • *
  • Posts: 13
TlargeIntField set filter error
« on: February 04, 2025, 03:43:21 pm »
var
  Fdb:Tbufdataset;
begin
  Fdb:=Tbufdataset.Create(nil);
  Fdb.FieldDefs.Add('prjid',ftlargeint);
  Fdb.FieldDefs.Add('no',ftstring,10);
  Fdb.CreateDataset;
  Fdb.AppendRecord([3556856671915480078,'1']);
  Fdb.AppendRecord([3556856671915480078,'2']);
  Fdb.AppendRecord([3556856671915480017,'3']);
  Fdb.Filter:='prjid=3556856671915480078';                    -- raise Exception
  Fdb.Filtered:=True;   
end; 


zhangshelly

  • New Member
  • *
  • Posts: 13
Re: TlargeIntField set filter error
« Reply #1 on: February 04, 2025, 03:58:04 pm »
var
  Fdb:TmemDataset;
begin
  Fdb:=TmemDataset.Create(nil);
  Fdb.FieldDefs.Add('prjid',ftlargeint);
  Fdb.FieldDefs.Add('no',ftstring,10);
  Fdb.CreateDataset;
  Fdb.AppendRecord([3556856671915480078,'1']);
  Fdb.AppendRecord([3556856671915480078,'2']);
  Fdb.AppendRecord([3556856671915480017,'3']);
  Fdb.Filter:='prjid=3556856671915480078';                   
  Fdb.Filtered:=True;                                           --no filter
end;

cdbc

  • Hero Member
  • *****
  • Posts: 1871
    • http://www.cdbc.dk
Re: TlargeIntField set filter error
« Reply #2 on: February 04, 2025, 04:24:57 pm »
Hi
'ftLargeInt' = int64; NOT QWord. That means, your integer is prolly too large!
Regards Benny
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE5 -> FPC 3.2.2 -> Lazarus 2.2.6 up until Jan 2024 from then on it's: KDE5/QT5 -> FPC 3.3.1 -> Lazarus 3.0

zhangshelly

  • New Member
  • *
  • Posts: 13
Re: TlargeIntField set filter error
« Reply #3 on: February 04, 2025, 04:28:32 pm »
it can save  3556856671915480078 as value and display right, only can't  filter
the same code change to Tadodataset in delphi,the result is right

zhangshelly

  • New Member
  • *
  • Posts: 13
Re: TlargeIntField set filter error
« Reply #4 on: February 04, 2025, 04:34:41 pm »
it can save  3556856671915480078 as value and display right, only can't  filter
the same code change to Tadodataset in delphi,the result is right
uses  VirtualTable(unidac) can get right result

  var
  Fdb:TVirtualTable;
begin
  Fdb:=TVirtualTable.Create(nil);
  Fdb.FieldDefs.Add('prjid',ftlargeint);
  Fdb.FieldDefs.Add('no',ftstring,10);
  Fdb.active:=True;
  Fdb.AppendRecord([3556856671915480078,'1']);
  Fdb.AppendRecord([3556856671915480078,'2']);
  Fdb.AppendRecord([3556856671915480017,'3']);
  Fdb.Filter:='prjid=3556856671915480078';
  Fdb.Filtered:=True;
  ds.DataSet:=fdb; 
end;   

BrunoK

  • Hero Member
  • *****
  • Posts: 671
  • Retired programmer
Re: TlargeIntField set filter error
« Reply #5 on: February 04, 2025, 06:07:18 pm »
Probably a bug, see following program.
Code: Pascal  [Select][+][-]
  1. program a;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. uses
  6.   Classes,
  7.   SysUtils,
  8.   DB,
  9.   BufDataset;
  10.  
  11. var
  12.   Fdb: Tbufdataset;
  13. begin
  14.   Fdb := Tbufdataset.Create(nil);
  15.   Fdb.FieldDefs.Add('prjid', ftlargeint);
  16.   Fdb.FieldDefs.Add('no', ftstring, 10);
  17.   Fdb.CreateDataset;
  18.   Fdb.AppendRecord([0, '0']);
  19.   Fdb.AppendRecord([High(Int64), '1']);
  20.   Fdb.AppendRecord([3556856671915480078, '2']); // ~bk is within range of ftLargeInt
  21.   Fdb.AppendRecord([3556856671915480017, '3']);
  22.   WriteLn('RecordCount=', Fdb.RecordCount, ' UNFILTERED');
  23.   with Fdb do begin
  24.     First;
  25.     while not EOF do begin
  26.       WriteLn(FieldByName('prjid').AsString, ' ', FieldByName('no').AsString: 4);
  27.       Next;
  28.     end;
  29.   end;
  30.   Fdb.Filter := 'prjid=3556856671915480078'; // 'prjid=0' -> works
  31.   WriteLn('Filtered with ''', Fdb.Filter, '''');
  32.   Fdb.Filtered := True;
  33.   with Fdb do begin
  34.     First;
  35.     while not EOF do begin
  36.       WriteLn(FieldByName('prjid').AsString, ' ', FieldByName('no').AsString: 4);
  37.       Next;
  38.     end;
  39.   end;
  40.  
  41.   ReadLn;
  42. end.

cdbc

  • Hero Member
  • *****
  • Posts: 1871
    • http://www.cdbc.dk
Re: TlargeIntField set filter error
« Reply #6 on: February 04, 2025, 07:02:42 pm »
Hi
@BrunoK: I copy pasted your example and compiled it with trunk and ran it...
Screenshot attached...
Regards Benny
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE5 -> FPC 3.2.2 -> Lazarus 2.2.6 up until Jan 2024 from then on it's: KDE5/QT5 -> FPC 3.3.1 -> Lazarus 3.0

BrunoK

  • Hero Member
  • *****
  • Posts: 671
  • Retired programmer
Re: TlargeIntField set filter error
« Reply #7 on: February 04, 2025, 07:22:05 pm »
Hi
@BrunoK: I copy pasted your example and compiled it with trunk and ran it...
Screenshot attached...
Regards Benny

Interesting, will take a look tomorrow. Me is fpc 3.2.2 but with more recent package db from trunk.

 

TinyPortal © 2005-2018