|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
Добрый день! Возникла странная проблема в FIBPlus 7.4.1731. Постараюсь описать подробно. Сорри, если оффтоп. Есть своя функция, которая возвращает результат запроса в TStringList. Вот фрагмент функции, значимый на мой взгляд. Если нужно больше инфы, то могу предоставить. Эта функция работает без ошибок в основном соединении программы. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Теперь же понадобилось вынести ее вызов в поток. В потоке создается экземпляр БД, транзакция и запрос: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Далее вызываем первую функцию Код: pascal 1.
На строке CheckValidStatement появляется ошибка: Invalid Statement Handle . В исходниках видно, что CheckValidStatement вызывает TFIBQuery.Prepare, в которой и возникает ошибка на строке: Код: pascal 1. 2. 3. 4.
Решил убрать вызов CheckValidStatement и свой setParams (т.к. в данном случае в запросе нет параметров) и оставить только ExecQuery. В этом случае запрос выполняется без ошибок и возвращает правильные строки. Примечательно, что в самом ExecQuery тоже есть вызов TFIBQuery.Prepare, который в этом случае проходит без ошибки. Конечно, можно для потоков готовить запросы без параметров, вставляя нужные значения в текст запроса напрямую, и не вызывать CheckValidStatement, и это наверняка решит проблему. Но вопрос причины ошибки останется не решенным. И где это позже может проявиться, тоже сейчас неизвестно. Кто-нибудь может подсказать, в чем причина ошибки? p.s. TSrvModule.getRecList_List исправно работает в приложении уже несколько лет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 13:00 |
|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
Уверен что вызов SrvModule.getRecList_List в том же потоке где создавался коннект ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 13:07 |
|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
Frees, уверен. Забыл сказать, что ошибка происходит только при коннекте по IP-адресу, типа 192.168.1.4/3055. Если соединяться локально через localhost/3055, то проблем нет. Точнее, сначала была похожая проблема, которая решилась установкой FDB.SQLDialect := 3. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 13:12 |
|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
Может тогда твой setParams и коннект заодно запросу прописывает? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 13:15 |
|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
Frees, тоже нет. Да и к тому же "фибовский" CheckValidStatement вызывается раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 13:17 |
|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
автор Result := TStringList.Create; В случае несоединенной базы выделенная здесь память утечет автор Close; Как запрос м.б. открытым на несоединенной базе? автор ParamCheck := false; ParamCheck := true; Это что еще за передергивание )) авторВ потоке создается экземпляр БД, транзакция и запрос: Я надеюсь, этот кусок содержится в Execute, а не в конструкторе потока? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 18:27 |
|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
Го-стхи, 1. память не утечет, т.к. внизу finally. 2. Close тут может и лишний, но он явно не мешает. 3. "Передергивание" тоже не мешает. 4. Создание FDB в Execute, а остальное в приватной функции потока Код: pascal 1.
Могу попробовать все создавать в Execute, задекларировав в классе TThreadSQL = class(TThread). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 19:06 |
|
FIBPlus и CheckValidStatement. Проблемы в потоке
|
|||
---|---|---|---|
#18+
Marcello, 1. Еще как утечет, у тебя Create до try 4. Тут я перебдел, скорее всего, это не играет роли - это для окон требуется, а с обычными классами не должно влиять. Хотя, кто знает, что там в кишках компонентов. Но у меня IBX в доп. потоке работает, а создается в конструкторе, и всё пучком. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2016, 10:09 |
|
|
start [/forum/topic.php?fid=40&msg=39283834&tid=1562033]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 150ms |
0 / 0 |