Вылет при <TSQLQuery>.Locate() [РЕШЕНО]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вылет при <TSQLQuery>.Locate() [РЕШЕНО]

Сообщение sign » 23.07.2011 13:34:09

Сломал голову, в полном тупике.

Вот тут

Код: Выделить всё
if qSponsor.Locate('NNPCTO', k, []) then begin


если k таково, что записи с таким значением поля в базе нет, то
Код: Выделить всё
Проект вызвал класс исключений 'External: SIGSEGV'


Куда копать и где рыть?
Причём, на других запросах такого безобразия нет, Locate отвечает «да» или «нет», по успеху или неуспеху запроса.

Сам запрос:
Код: Выделить всё
qSponsor: TSQLQuery;  (TmySQL50Connection)

SELECT L.Un, R.NNPCTO, R.NNPCTO_Sponsor, R.CIINS, R.CIINS_Sponsor,
       M0.SNNPCTO as SN0, M0.SVirta as SV0, M0.SCIINS as SC0, L.FIO
FROM list L
  LEFT JOIN reg R ON L.Un = R.Un
  LEFT JOIN (SELECT  Un, EXTRACT(YEAR FROM DateOp) AS Yr0,
      EXTRACT(Month FROM DateOp) AS Mn0,  SUM(BallNNPCTO*CountBuy) As SNNPCTO,
      SUM(BallVirta*CountBuy) As Svirta, SUM(BallCIINS*CountBuy) As SCIINS
      FROM move0
      WHERE EXTRACT(YEAR FROM DateOp)= :Yr and EXTRACT(Month FROM DateOp) = :Mn
      GROUP BY Un, Yr0, Mn0
      ORDER BY Un) M0 ON L.Un = M0.Un
ORDER BY R.NNPCTO

База - MySQL

Лазарус #: 0.9.31
FPC: 2.4.4
SVN: 31775
i386-win32
Windows XP
Последний раз редактировалось sign 25.07.2011 06:27:59, всего редактировалось 1 раз.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Вылет при <TSQLQuery>.Locate()

Сообщение Ism » 23.07.2011 17:07:06

Похоже на очевидный баг. Попробуйте задать опции TLocateOptions, например loPartialKey.

Попробуйте if (qSponsor.Locate('NNPCTO', k, [])) then begin скобки чисто в качестве бубна, но иногда срабатывает

возможно qSponsor.Locate('NNPCTO', k, []) возвращает null вместо false, надо посмотреть документацию.

А вообще странно. Может какие то непечатные символы в базе мистику наводят.
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Вылет при <TSQLQuery>.Locate()

Сообщение sign » 24.07.2011 06:31:41

Ism писал(а):Похоже на очевидный баг. Попробуйте задать опции TLocateOptions, например loPartialKey.

Завтра на работе попробую. Хотя, к числам оно как-то..., ну всё равно, проверю.

Ism писал(а):Попробуйте if (qSponsor.Locate('NNPCTO', k, [])) then begin скобки чисто в качестве бубна, но иногда срабатывает

И это попробую.

Ism писал(а):возможно qSponsor.Locate('NNPCTO', k, []) возвращает null вместо false, надо посмотреть документацию.

Хм. В других запросах всё ОК.

Ism писал(а):А вообще странно. Может какие то непечатные символы в базе мистику наводят.

Попробую перегнать базу.

Спасибо за советы.

Добавлено спустя 23 часа 55 минут 45 секунд:
Записал один из файлов (list) в форме SQL, очистил таблицу (truncate), выполнил SQL.
Всё, ошибки нет.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru