Page 1 of 1

TZQuery.Locate method loPartialKey is ignored

Posted: 03.12.2024, 15:29
by martinus
Hi

I found that the TZQuery.Locate method with loPartialKey doesn't work anymore as expected on Zeos 8.0
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)

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 have checked that it is OK with Zeos 7.2.6 and the same code and configuration.

I can easily reproduce with an example project, containing :

Code: Select all

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if ZreadonlyQuery1.Locate ('Account', edit1.Text, [loPartialKey] ) then
    caption := 'found'
  else
    caption := 'not found';
end;   
For the example need to create a table with at least one field "Account" VARCHAR (10) and populate it.
Or you can adapt the code to an existing table.
I'm unable to add the example project in attachments.

Re: TZQuery.Locate method loPartialKey is ignored

Posted: 10.12.2024, 10:23
by martinus
Hi

I have found where is the bug.

In src/components/ZDatasetUtils.pas, line 1138 should be :

Code: Select all

WValue2 := Copy(WValue2, 1, L1);  
instead of

Code: Select all

WValue2 := Copy(WValue2, 1, L2);

Re: TZQuery.Locate method loPartialKey is ignored

Posted: 13.12.2024, 12:24
by marsupilami
Hello martinus,

I added your patch to the SVN. Thank you :)

Best regards,

Jan