Lazarus

Other Languages => Russian => Topic started by: Patro de Nordo on February 01, 2019, 08:50:12 am

Title: Lazarus 2.0.0.RC3 - ошибка в Sequence для SQLite: Near FOR syntaх error
Post by: Patro de Nordo on February 01, 2019, 08:50:12 am
Зарегистрировался чтобы об ошибке сообщить. Вдруг поможет.
Lazarus 2.0.0.RC3
Используется SQLite 3.2.5
Win32

TSQLite3Connection.GetNextValue(...)  ругается near "FOR": syntax error.
Та же самая ошибка возникает, если использовать редактируемый ТSQLQuery, у которого указать Sequence. Ошибка возникает после вызова Post для вставляемой записи.

Это как-то можно обойти или починить?
Title: Re: Lazarus 2.0.0.RC3 - ошибка в Sequence для SQLite: Near FOR syntaх error
Post by: sash on February 01, 2019, 09:56:25 am
Не пользуюсь SQLite, но было бы лучше описать проблему полнее.
Title: Re: Lazarus 2.0.0.RC3 - ошибка в Sequence для SQLite: Near FOR syntaх error
Post by: Patro de Nordo on February 01, 2019, 10:36:15 am
Разобрался, как включить протоколирование запросов и уточнил проблему. При использовании Sequence пытается выполнить запрос:
Code: SQL  [Select][+][-]
  1. SELECT NEXT VALUE FOR <sequencename>
  2.  
Но этот запрос некорректен для SQLite.
Ругается как я описал выше.
Выполнение такого запроса происходит если явным образом у компонента TSQLite3Connection вызвать метод GetNextValue,
либо если у компонента TSQLQuery заполнить свойство Sequence и попытаться сохранить новую запись.

Приемлемый запрос вместо ошибочного может выглядеть примерно так:
Code: SQL  [Select][+][-]
  1. SELECT seq+1 FROM sqlite_sequence WHERE name=<sequencename>
  2.  
С его помощью я смог обойти проблему, отключив в компоненте TSQLQuery использование Sequence и просто заполняя автоинкрементное поле с помощью этого запроса на событии BeforePost.
Title: Re: Lazarus 2.0.0.RC3 - ошибка в Sequence для SQLite: Near FOR syntaх error
Post by: Patro de Nordo on February 01, 2019, 10:46:48 am
Поиском по исходникам локализовал проблему:
sqldb.pp строка 2000
Code: Pascal  [Select][+][-]
  1. function TSQLConnection.GetNextValueSQL(const SequenceName: string; IncrementBy: Integer): string;
  2. begin
  3.   Result := 'SELECT NEXT VALUE FOR ' + SequenceName;
  4. end;
  5.  
Очевидно, что этот метод должен быть переопределен для TSQLite3Connection (файл sqlite3conn.pp), но это не сделано.
Собственно, вот и способ исправления нарисовался.
Могу сам себе поправить, но может кто-нибудь сможет донести это до разработчиков, чтобы в релизе поправили?
Title: Re: Lazarus 2.0.0.RC3 - ошибка в Sequence для SQLite: Near FOR syntaх error
Post by: HuntingKashket on March 17, 2019, 04:39:51 pm
Поиском по исходникам локализовал проблему:
sqldb.pp строка 2000
Code: Pascal  [Select][+][-]
  1. function TSQLConnection.GetNextValueSQL(const SequenceName: string; IncrementBy: Integer): string;
  2. begin
  3.   Result := 'SELECT NEXT VALUE FOR ' + SequenceName;
  4. end;
  5.  
Очевидно, что этот метод должен быть переопределен для TSQLite3Connection (файл sqlite3conn.pp), но это не сделано.
Собственно, вот и способ исправления нарисовался.
Могу сам себе поправить, но может кто-нибудь сможет донести это до разработчиков, чтобы в релизе поправили?

With search in sources i localized the problem:
sqldb.pp string 2000
Code: Text  [Select][+][-]
  1. function TSQLConnection.GetNextValueSQL(const SequenceName: string; IncrementBy: Integer): string;
  2. begin
  3.   Result := 'SELECT NEXT VALUE FOR ' + SequenceName;
  4. end;
  5.  
This code isn't correct for sqlite3, which faults with <<near "FOR": syntax error.>>
Obviously, this method must be redeclared for TSQLite3Connection (file sqlite3conn.pp), but this isn't done.
Please, redeclare this with something like
Code: MySQL  [Select][+][-]
  1. SELECT seq+1 FROM sqlite_sequence WHERE name=<sequencename>
  2.  
-- Translation & summary from wanderus

Please, someone, pay attention to this bug.

Title: Re: Lazarus 2.0.0.RC3 - ошибка в Sequence для SQLite: Near FOR syntaх error
Post by: JuhaManninen on March 17, 2019, 05:36:47 pm
Please report with steps to reproduce and preferably a patch to fix it.
 https://bugs.freepascal.org/my_view_page.php
TinyPortal © 2005-2018