Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];
ВнизСервис + созданный в рантайме TADOConnection -> проблема с Найти похожие ветки
← →
Ihor Osov'yak (2003-01-24 03:03) [0]коннектом....
Вернее останавливается нить навечно на Connected := true;
В том же месте, но созданый традиционно, методом кидка на TService с аналогичными свойствами екземпляр TADOConnection
коннектится без проблем.
Никто такой странной вещи не наблюдал? И если наблюдал - то как боролся?
← →
sniknik (2003-01-24 08:23) [1]не наблюдал но уже обсуждалось, пытался воспроизвести не удалось. у товарища решилось но что было он не написал. :-(
(подозреваю coInitialise не сделано, но .....???)
посмотри пример (рабочий) сравниш со своим может и решится (как и у него)
http://delphi.mastak.ru/cgi-bin/download.pl?look=1&id=1042708779&n=1
← →
Ihor Osov'yak (2003-01-24 13:26) [2]>(подозреваю coInitialise не сделано, но .....???)
Да нет, я уже вышел из такого возраста, чтобы на такие грабли наступать..
> но что было он не написал. :-(
Нехороший он... Или ошибка тупой была, настолько, что стыдно вслух было сказать...
Делал примерно так, как ты, с той разностью создание коннекта не в отдельном потоке (хотя и это планировалось на потом),
а делалась попытка поначалу и в потоке сервиса, потом и в основном потоке...
.. Признал временное поражение, сделал пока схему с одним коннектом, к которому очередь выстраивается - проэкт должен был быть готов сегодня на утро, но придется еще как минимум пол-дня работать...
Поначалу сойдет, а потом может и разберусь, если заказчик на сервис уж много клиентов посадит... Тем более, что эти коннекты желательно разносить по своим рабочим потокам, я к этому не дошел даже, приехал на создании в рантайме...
... через эту траблу сидел к четырем утра..
← →
sniknik (2003-01-24 13:52) [3]Ihor Osov"yak © (24.01.03 13:26)
нифига не понял. :-))
не, понял, что проблему решил, убого и самому не нравится но решил.
не понял когда трабл возникает. когда делаеш несколько потоков? или несколько коннектов? к разным/одной базе подключение?
в общем, набросай схему pls. где как в каком получается и где нет. может и пригодится знать где грабли возможны. а может и решим сообща.
← →
Ihor Osov'yak (2003-01-24 15:04) [4]Вообще-то задача такова - сервис (требование заказчика), по TSrvSocket удаленные клиенты должны подключатся к довольно простенькой базе, база аксесовская(требование заказчика), клиентов может быть несколько десятков, но запросы простые, врямя выполнения - доли секунды....
Для сокета выбрал stThreadBlocking, c созданием своего рабочего потока для каждого коннекта (юзаю SrvSocketGetThread). Ассинхронный режим не брал может из-за лени, но главное в том, что все обработчики асинхронного вводв-вывода вызываются в одном потоке, следовательно для работы с базой для каждого коннекта нужно будет создавать по рабочему потоку. Впрочем, это для конкретной задачи может и засильно (многопоточная работа с базой), но есть хороший повод на маленьком проекте тренировку пройти. Но посколько для stThreadBlocking и так создаются потоки, то планировал работу с базой для каждого коннекта делать в соотв. потоках.
А теперь что вышло. В потоках, что создаются через SrvSocketGetThread облом - поток останавливается на
conn.Connected := true; ес-но с CoInitialiыe все в порядке, проперти самого коннекта проверялись не единыжди... Списал по началу на то, что в этом потоке нет цыкла выборки сообщений, бог его знает, что это адо внутри делает, небыло времени уже разбираться - поздний вечер... Думаю, для начала попытаюсь создать коннект в рантайме в потоках с цыклами выборок. Делал в собственно и в потоке сервиса (в обработчике ServiceStart),
и в основном потоке, в обработчике соотв. сообщения (юзалось и PostMessage с задействованием зацепки forms.Application.OnMessage, и SendMessage с предварительным юзанием AllocateHWnd, с целью обеспечения цели для того же SendMessage).
Симптомы везде те же. Останов потока на conn.Connected := true;, без никакого ексепшен.. В том же обработчике (это для случая основного потока, для других ес-но не пытался), коннект, созданный в дизайнере и с теми же значениями проперти конектится на ура.
... Не знаю даже, как воевать... Через несколько дней будет время - более детально изучу исходники vcl, может и отладчиком на диссамблерном уровне чего-то выловлю (точнее локализирую точку останова)
← →
Zelius (2003-01-24 17:57) [5]Сорри, понимаю, что глупо, но на всякий случай - стоит ли AdoConnection.LoginPrompt = False?
Еще раз сорри :)
← →
Ihor Osov'yak (2003-01-24 18:54) [6]to Zelius © (24.01.03 17:57)
> Сорри, понимаю, что глупо, но на всякий случай - стоит ли AdoConnection.LoginPrompt = False?
Глупость и самоуверенность не имеет границ. Это я о себе.
Для LoginPrompt я даже присваивания не делал, мол в конструкторе в false сбрасыватся, и что более интересно, TADOConnection.Create
не единижды смотрел, а LoginPrompt := True; незаметил :-(.
А он, сервис, даже не говорил, что нефиг чего-то отображать... Просто останавливался...
Мораль какова - не..г ночью работать... Или спать надо, или... Ну, сами понимаете...
Короче, все ok, в тч. и в потоках, созданных в SrvSocketGetThread... Хотя проект уже почти готов, сейчас начну в человечиский вид приводить. То есть для каждого клиента по своему коннекту к базе в соотв. thread...
Большое спасибо, Zelius ©
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c