Forum > Databases

ZDataset.Locate + loPartialKey

(1/2) > >>

tintinux:
Hi

With Zeos 8.0, I found that the TZQuery.Locate method with loPartialKey doesn't work anymore as usual.
At least using Ubuntu 24.04, Lazarus 3.6, and MariaDb Ver 15.1 Distrib 10.11.8-MariaDB, for debian-linux-gnu (x86_64)

Unfortunately, I can't post on the ZeosLib forum (blocked, unable to access sourceforge.io) and don't find a related post elsewhere.
But I don't know if the issue is related to ZeosLib or Lazarus...

Problem is :
When the first characters of an existing key are entered, the result of Locate returns false (and the position in the Dataset don't change).
When a full existing key is entered, the Locate returns true and position is changed, as expected.
Looks like [loPartialKey] is ignored.

I'm sure that it was ok with Zeos 7 and the same code and configuration.

I can easily reproduce with this code example (only one string field).


--- Code: ---procedure TForm1.Edit1Change(Sender: TObject);
begin
  if ZreadonlyQuery1.Locate ('Account', edit1.Text, [loPartialKey] ) then
    caption := 'found'
  else
    caption := 'not found';
end;   
--- End code ---

I have attached the full Lazarus project.
Enter the name, username and password of your database in Zconnection1, and

--- Code: ---CREATE TABLE Accounts ( Account VARCHAR(10) NOT NULL );
INSERT INTO Accounts VALUES ('1000'), ('1005'), ('2000');

--- End code ---
Or you can adapt the code to an existing table...

Any ideas or workaround ?

tintinux:
The problem seems new with ZeosLib 8.0

I have installed ZeosLib 7.2.6 and it works fine as expected with the example.
Some manual changes are required in the .lfm, I find no way to make it compatible with both versions. :(

Unfortunately there are other bugs in this version, solved only by the 8.0.

Sieben:
Why not use SQLdb then?

tintinux:
You are off topic, but the answers to your question are :
1) SqlDb can attach to only one Database type (and sometimes to only one Database version) at a time.
2) SqlDb doesn't exist for Delphi AFAIK, and many developers are required to use it and don't want to have to master too many packages
3) I would have all my projects to change and test, with no known advantage.
4) I am sure that a workaround or a fix will be find to solve my small issue
Regards

silvercoder70:
I typically use Filter/Filtered properties of the query with LIKE

Not sure how well that would work in your scenario?

if Edit1.Text = '' then Query1.Filtered := False else begin
Query1.Filter := ...; Query1.Filtered := True;
end;

Navigation

[0] Message Index

[#] Next page

Go to full version