|
|
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги. Помогите плиз решить задачку, уже голову сломал. Приложение работает с БД на MS SQL Server. Использую два коннекта. Первый для работы с данными. Второй для подписки к ServiceBroker через FDEventAlert. Все бы ничего, и в штатном режиме все работает и закрывается корректно. НО при разрыве соединения (тупо выдергиваю сетевой шнурок) при попытке закрыть приложение Второй коннект зависает и не дает завершиться приложению. Помогает только снятие задачи через диспетчер. Дата модуль с элементами FireDAC создается динамически. При закрытие главной формы пытаюсь сделать Datamodule.Destroy - зависает. Пытаюсь руками закрыть коннект Connect2.Connected := false - зависает. Так же FDEventAlert.Unregister - зависает. Что еще можно попробовать, что бы корректно завершить приложение при разрыве соединения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 11:02 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Попробуйте. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 22:18 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Есть подозрение что зависает вот тут: Пройдите отладчиком, посмотрите Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 22:24 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Проблема точь в точь! Долго не мог понять в чём проблема, и она проявилась после того как сделал перевод проекта в XE6 на DX10.2. X-CiteПопробуйте. Код: sql 1. Это не помогает((( Помогите, что ещё можно попробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 14:40 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Игорь_UUS, Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 17:14 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
cptngrbИгорь_UUS, Код: pascal 1. 2. теперь пишет ошибку "Must by active" на Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 17:39 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Попробуй заменить тело метода на: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 21:51 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Dmitry, скажите, вы сейчас поддерживаете FireDAC или "Изя все"? Или в Дебаркадере кто-то его пилит вместо вас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 22:25 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Dmitry ArefievПопробуй заменить тело метода на: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Dmitry ВЫ БОГ!!!! Огромное спасибо!!! Помогло, единственное не разобрался как перекомпилить исходники пакета ((. Файл данного юнита скопировал в папку с проектом, внёс корректировки... получается при компиляции, среда его подхватывает (а не тот, который лежит в директории delphi) и работа идёт уже с ним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 10:02 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev, Только обрадовался, но не тут то было. Если в процессе работы произошло разъединение с БД, программа не залипает, и восстанавливает соединение корректно. Но, когда начинаешь закрывать приложение появляется "access violation at address..." Пробовал "и так и эдак", и уничтожал объект "EventAlerter" и создавал заново после разрыва... всё равно ошибка памяти лезет. Видимо поток созданный в EventAlerter "висит"(( и выход в "InternalAbortJob" Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. всё же не корректен. Что можно ещё попробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 10:52 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
я совсем не в теме, просто проходил мимо :) и заметил, что как то странно используется имя класса. Удивлен, что это вообще скомпилировалось Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 11:25 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
P.S. если Current(), конечно, не классовая функция .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 11:31 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
P.P.S. Aaaa http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Classes.TThread.Current Код: pascal 1. ОК, не обращайте внимание на все мои 3 поста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 11:38 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Если указать в свойстве TFDEventAlerter.Options.Timeout что-то более "0", то FAlerter.FWaitCommand.Open() будет жить именно это время в милисекундах. Но если возникает ошибка разъединения, данный метод залипает и следовательно поток остаётся жив! Ошибка видна только под дебагом, следовательно она находится "где-то" под try except end, и далее что-то идёт не так как штатно. Из за того, что поток остаётся жив, я предполагаю именно из-за этого возникает ошибка памяти по завершению приложения(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 12:05 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Игорь_UUS (FWaitThread.ThreadID <> TThread.Current.ThreadID) and (FWaitThread <> nil) Условия нвадо поменять местами .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 12:22 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Dmitry ArefievИгорь_UUS (FWaitThread.ThreadID <> TThread.Current.ThreadID) and (FWaitThread <> nil) Условия нвадо поменять местами .... Поменял, помогло на 50% Из procedure TFDPhysMSSQLEventThread.Execute стал выходить... но вот ошибка памяти по каким то причинам осталась((, но вот только под дебагом. При этом ошибка не лезет наружу, если запуска не под дебагом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 13:20 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
По коду получилось вот так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. я полагаю как надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 13:29 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Игорь_UUS Из procedure TFDPhysMSSQLEventThread.Execute стал выходить... но вот ошибка памяти по каким то причинам осталась((, но вот только под дебагом. При этом ошибка не лезет наружу, если запуска не под дебагом Настройка компилятора "Complete boolean evaluation" должна быть False и в Debug и в Release ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 14:24 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
X-CiteИгорь_UUSИз procedure TFDPhysMSSQLEventThread.Execute стал выходить... но вот ошибка памяти по каким то причинам осталась((, но вот только под дебагом. При этом ошибка не лезет наружу, если запуска не под дебагом Настройка компилятора "Complete boolean evaluation" должна быть False и в Debug и в Release И там и там всегда в False ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 14:31 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
После двухдневных "танцев с бубном" это хоть как то стало работать(((. Под "хоть как то" явно на настылях, что-то внутри работает не правильно. Код: sql 1. Данная "подпилка" действительно помогает избежать залипания программы при разрыве связи, но под демагогом лезут ошибки памяти при завершении работы программы, или если в процессе работы вызвать: Код: pascal 1. Если же оставить по старому: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. работает стабильно (имеется ввиду без ошибок памяти) хоть под дебагом хоть просто запускай, НО программа обязательно залипнет как только произойдёт сбой связи с базой данных. В компоненте "TFDEventAlerter" 100% есть баг, и его похоже не было в Delphi XE6. Могу судить по тому, как только перешли на Delphi DX10.2, и установив эту сборку клиентам, периодический поступают жалобы о залипании программы ИМЕННО после потери связи с сервером. Остаётся надеяться, что данный "костыль" не будет усугублять проблему в собранном проекте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 14:46 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Игорь_UUS, Так оформите в QC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 16:10 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
09.10.2018 16:10, X-Cite пишет: > Так оформите в QC а смысл? он же с автором общался. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 16:15 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. Kстати, нигде не смог найти в доке, но опытным путем заметил (Delphi 6), что второе условие не будет даже проверятся, если первое FALSE. И всвязи с этим не знаю, всегда ли такое поведение. Есть ли 100%-ая гарания этой последовательности выполнения. Ведь если нет, то возможен вызов FWaitThread.ThreadID даже если FWaitThread=nil . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 16:22 |
|
||
|
FireDAC зависает при разрыве соединения.
|
|||
|---|---|---|---|
|
#18+
09.10.2018 16:22, Кроик Семён пишет: > Kстати, нигде не смог найти в доке, да ты уху ел. F1: Complete versus short-circuit Boolean evaluation Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 16:24 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39714593&tid=2040305]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 508ms |

| 0 / 0 |
