|
|
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
Создаю службу. Есть главный и 2 отдельных потока. Компоненты находятся на форме типа (DataModule). Не помню как она называется)). Из потока хочу сделать вставку. И конечно же выбивает ошибку по адресу... Просто странно компоненты он видит и тд. Компилится. Но бьёт по адресу... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:05:42 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Текст ошибки-то какой? Телепатов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:12:39 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, И я очень надеюсь, что MSServisPK - это не TDataModule, который общий (т.е. виден из всех потоков), и который используется всеми потоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:15:50 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
goldmi45, MSServisPK это подобие датамодуля(не видимая форма). Короче при создании Applcation Service. Создаётся по умолчанию эта форма. (TService). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:18:52 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Вот текст ошибки. Потоки создаются в момент OnCreate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:20:18 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Запрос находится в потоке а компоненты на этой форме. Беда где-то тут)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:21:24 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Вы представляете, что будет, если один поток запустит транзакцию и установит у компонента ADQuery1 текст запроса, а потом другой поток сделает то же самое? Или делайте синхронизацию, или у каждого потока должен быть свои компоненты доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:25:46 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
goldmi45, Так что придется в каждом потоке делать подключение к бд и тд?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:33:48 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
Я в своем многопоточном приложении создавал отдельные компоненты как подключения так и всего остального. Максимум что я вызывал из главного потока это значения контролов для установки настроек для компонентов и через синхронизацию писал лог, обновлял леблы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:46:04 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamerogoldmi45, Так что придется в каждом потоке делать подключение к бд и тд?! Ну не делайте, раз это вас пугает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:54:49 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
goldmi45, Synchronize(Процедура1)?! И так можно синхронизировать 2 потока с основным?! Чтобы был доступ к компонентам?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:04:26 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Не страдайте ерундой, а делайте свое подключение и т.п. для каждого потока. И ответьте плиз на вопрос - назачем вам в Service синхронизация с главным потоком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:27:16 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
DarkMaster, В OnCreate происходит подкл. к БД (И делается одна запись в БД, ну и при закрытии то же самое). Потом создаются 2 потока, примерно идентичные. И дабы не воять новые подключения к БД. Я решил с главного потока взять подключение к БД. Как бы синхронизация между главным и этими двумя не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:33:00 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
ADO не threadsafe... надо самому делать. FireDAC threadsafe он за вас это делает. Но вы должны понимать, что если вы работаете без pool то одно подключение к БД и якобы параллельно 20 запросов - это 20 запросов по очереди. Сервер БД не умеет от одной сессии делать N запросов параллельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:44:17 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
X-Cite, У меня не ADO. A AnyDAC. Прародитель FireDAC))) Я добавил синхронизацию и теперь вижу только 1 поток... 2 поток не отрабатывает вообще не как) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:49:12 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kameroDarkMaster, В OnCreate происходит подкл. к БД (И делается одна запись в БД, ну и при закрытии то же самое). Потом создаются 2 потока, примерно идентичные. И дабы не воять новые подключения к БД. Я решил с главного потока взять подключение к БД. Как бы синхронизация между главным и этими двумя не нужна. Это вы так считаете. Но если вы используете общую память (а компоненты ведь в ней располагаются), то просто обязаны синхронизировать эти данные. Проще всего будет создавать в каждом потоке своё подключение, транзакции и только их и использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:50:26 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Вот сам поток. Между собой они ни чем практически не отличаются. 2-3 момента по коду. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:51:17 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Если вы в Execute потока напишете только одну строку Synchronize(Ins1), то это означает, что поток будет выполняться не параллельно главному, а (фигурально выражаясь) в нем. Т.е. смысла в вашей многопоточности приложения - ноль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:58:56 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
goldmi45, Короче я понял что надо сделать но не знаю как))) Объясню логику. Помогите с реализацией)) Создаётся главный в нём туда сюда 2 запроса. Один при запуске, другой при закрытии. В момент запуска создаются 2 потока. Первый отлавливает запуск приложений. Второй закрытие. Они должны работать параллельно. Так как оба ожидают своих событий. Они работают с той же базой что и основной. Как не создавая все компоненты с работой БД это реализовать?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 16:08:57 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kameroКак не создавая все компоненты с работой БД это реализовать?! На каждый поток проще и надежнее создавать все необходимые компоненты для соединения с БД. Либо научить потоки "общаться" с главным, который и будет работать с базой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 16:11:28 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Вот по этому у меня только 1 поток и отрабатывает... А вот можно еще наверное по другому. Сами запросы вынести в главный поток. А из этих двух дергать просто параметры и передавать их в этот запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 16:12:05 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Т.е., если по-человечески, вы хотите сохранять в базе время запуска сервиса и время окончания его работы. При этом есть два потока, один мониторит запуск(!), а второй завершение (??). Почему бы не сделать в одном потоке, причём основном? В OnStart сервиса писать время запуска, в OnStop - время остановки. Либо как у вас - потоки. Но потоки только для мониторинга факта наступления события, а запись в БД - в основном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 16:20:42 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
goldmi45, В основном время запуска и завершения самого моего сервиса. А в потоках идёт отлавливание сторонних процессов(Word, Chrome и тд). В первом время запуска процесса, а второй время остановки. Они на протяжении всего времени ожидают своих событий(запуска или закрытия). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 16:23:48 |
|
||
|
В потоке ошибка с SQL
|
|||
|---|---|---|---|
|
#18+
kamero, Я бы не стал делать запись в БД во время остановки сервиса. Для того, чтобы записать в БД, нужен доступ к этой БД. А к ней в это время может и не быть доступа. К примеру - служба сервера остановлена уже, а ваша - только собирается останавливаться. Проще - время остановки сохранять в файл, а при старте его парсить и записывать время остановки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 16:26:18 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39561952&tid=2041496]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 447ms |

| 0 / 0 |
