powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять сбоит ADO в Intraweb с ciMultiThreaded
48 сообщений из 48, показаны все 2 страниц
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39835923
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогите, пожалуйста.

Мне нужно в оконном приложении с встроенным WEB-сервером ( компонент IWStandAloneServer версии 9 ) принимать GET-запросы и работать с базой MySQL 8. Работаю по цепочке OLE DB For ODBC <-> MySQl ODBC драйвер (нативного провайдера OLE DB для MySQL нет).

ciMultiThreaded в ServerController включено.

В IntraWeb, в событии IWServerControllerBaseBeforeDispatch, оставил только разбор Request.Content и операцию добавления строк в базу. Сначала создается ADOConnection, потом ADOQuery, потом в таблицу вставляются данные. Все это на всякий случай обрамил CoInitialize(nil) и CoUninitialize.

К Intraweb обращаются всего 2 шт. TCP/IP клиента с разных IP-адресов. Интервал обращения каждого - 1 секунда. Запросы, конечно, не синхронизированы, поэтому иногда могут почти совпадать по времени.

После 1500 - 2000 строк, добавленных в базу, возникает Acces Violation. Один раз удалось вставить чуть более 10000 записей. Но валиться всегда.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39835924
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, перед CoUninitialize сначала ADOQuery, потом ADOConnection уничтожаются.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836197
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще странность - если в потоке обработки оставить только создание ADO-соединения и его уничтожение в конце, то все работает.

Стоит в середину вставить создание ADO-запроса и производить выборку с двух клиентов, всего десяти первых строк из таблицы, в которую никто не пишет (в таблице есть около 1000 строк) то часа через пол опять возникает ошибка.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836318
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может обдумать идею пула соединений?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836375
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... хотя, судя по этому посту , я был не прав с пулом соединений
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836380
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть опасение, что свой велосипед будет еще хуже.

Мне кажется, что если я при динамическом соpздании коннекта ADO не указал какой-то там параметр, не помню его имя, с значением (-2), то ADO создает свой пул.

Кроме того, еще и в ODBC есть свой встроенный пул, в диспетчере. Типа Micrisoft о нас позаботился :-)
Пул ODBC пробовал включать - без толу.

Кроме того, проблема, похоже, проявляется при вступлении в дело Query, коннекты-то создаются и уничтожаются без зависаний.
Хотя это очень умозрительно конечно, после выполнения запроса и коннеект уже далеко не в том программном состоянии, что при ожидании.

Можно конечно попробовать другую базу, с нативным OLE DB провайдером, но это практически один MSSql. Как его потом прикручивать на хостинг к PHP... нет, это не вариант.

Как-то ведь люди кладут в базу данные по запросам, поступающим на Indy серверы, Intraweb это почти тоже самое.

Правильно я понимаю, что при каждом запросе в IWServerControllerBaseBeforeDispatch создается независимый поток, в котором можно создать объекты доступа к данным, выполнить чтение/запись и уничтожить объекты?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836556
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отключил встроенный в OLE DB пул. Скорость упала не критично.

Кажется, стало стабильнее. Пул в ODBC тоже пока отключен. Пока не падает на записи. Но это не точно.


Как думаете, может есть смысл поменять что-то еще в строке подключения? Курсор по умолчанию, серверный надо полагать.
Сделать без курсора? Клиентский надо думать не вариант точно.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836558
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. Опять облом на 3291 записи. Придется, видимо, процедурно, в Delphi, проверять при каждой вставке, что запись корректно попала в базу. Вот обломно-то....
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836644
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще, проблема в моем случае может быть глобально MDAC (ADO, OLEDEB) да и конкретный ODBC-драйвер для MySQL не стоит списывать.

Посоветуйте, пожалуйста, какие-либо бесплатные компоненты доступа к MySQL для Delphi? Чтоб уж попробовать подключаться и работать с базой через другую технологию.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836684
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh,

Может стоит саму СУБД поменять? Тогда и с компонентами, даже штатными, будет попроще.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836716
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezhПосоветуйте, пожалуйста, какие-либо бесплатные компоненты доступа к MySQL для Delphi? Чтоб уж попробовать подключаться и работать с базой через другую технологию.
Ну если для "попробовать" то Zeos вроде поддерживает MySQL. Правда сам я ею не пользовался.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836729
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh,


У меня есть положительный опыт с SciBit MyComponents VCL Suite , но их сайта что то больше нет www.scibit.com :( Жалко, прекрасные компоненты. В интернете они до сих пор находятся. но не знаю, законно ли их использовать ...

Так же часто на форумах проскакивала библиотека ZeosLib , но я сам опыта не имел с ней, так что не скажу.

И смотрите на лицензию, чтобы на GPL не наткнуться. Как здесь, например: MySQL direct (смотрите, там можно скачать юниты DirectMysqlObject.zip и демку DemoObjectsWin.zip или перейти на сайт проекта на sourceforge )
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39836730
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh,

Zeos
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837026
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, к Zeos обязательно присмотрюсь.

Пока же снес MySQL 8.0 (64bit) и ODBC драйвер (32bit) из его же инсталлятора.


Поставил MySQL 5.7.26 (32 bit) и ODBC из его же инсталлятора. На сейчас вставлено 12700 записей и полет нормальный.
Но вся эта ситуация очень странная, очень.

Нужно будет еще попробовать пописать в MySQL 5.7.26 (64 bit), кто знает, что будет у провайдера например....
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837060
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> И смотрите на лицензию, чтобы на GPL не наткнуться.

Поясните, пожалуйста. Правильно я понимаю, что MySQL Community можно без ограничений использовать в коммерческих проектах в том числе, а клиентские DLL от MySQL, которые использует Zeos, налагают какие-то ограничения?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837092
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksVoronezh,

Не далее как недавно тоже озаботился использования ADO в многопоточном режиме.

Сам пока не разобрался.

Но понял одно:
CoInitialize(nil) - создает single threaded appartment (только не спрашивай что это - 20+ проф. пишу, но с COM так и не разобрался до конца).

Может в этом собака?
Я не до конца ситуацию понял - как ты создаешь и используешь ADO. Но вроде надо быть крайне осторожным.

Вот статейка про STA и MTA (я пока сам не врубился): https://rsdn.org/?article/com/apartmnt.xml
Да и вообще масса материала по запросу "ADO multi threaded". Опять же - сам пока не понял, но вроде как мысль моя правильная - просто так вот взять и работать с ADO из разных потоков как бы нельзя, ну или надо хорошо подумать.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837112
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Timokhov,
добрый день.

По моим наблюдениям, что с CoInitialize(nil) , что без - разницы никакой. Возможно, срабатывает в моем случае то, что ciMultiThreaded в ServerController включено.

Создаю сначала коннект, потом запрос, самым обычным образом .create(self), (создаю внутри обработчика IWServerControllerBaseBeforeDispatch, в Intraweb, этот обработчик, по идее, всегда сам стартует новый поток, на поступивший запрос от браузера) присваиваю строку подключения и работаю с ними, потом уничтожаю.

Надежности никакой. После примерно 10000 записей точно отвалиться, но чаще отваливается примерно после 1500 вставок. Но надо признать, что память потребляемая приложением с ADO практически не растет.


Сделал сейчас то же на Zeos. Пока - ни одного вылета, вставил 20 000 строк потом пока прервал. Но приложение с 10 мб при старте стало занимать около 120 мб. Получается, ZQuery.Close; ZQuery.Free и ZConnection.Connected:=False; ZConnection.Free;
недостаточно? В порядке бреда делаю еще ZQuery.EmptyDataSet;, но это похоже никак не помогает. Напомню, все остальное в обработчике не менялось, только способ доступа к БД. С ADO память доходила мегабайт до 20 и дальше практически не росла.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837116
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть с ADO память нужно считать как сумму потребления нескльких процессов ...
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837117
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, может что и несколько, конечно. Но куда Zeos есть память - не понятно.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837131
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вы используете FastMM4?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837133
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.... просто, возможно с ним меньше получится
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837136
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, FastMM4 не пробовал. Просто Delphi 2006 "из коробки"

Да, про Zeos. 25 000 встаовк в таблицу и никаких признаков умирания. Но в памяти - около 250 мб!

Вот отчет при закрытии приложения:
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837139
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, еще наблюдение - память, похоже, уходит в ZQuery. Оставил в обработчике только создание/подключение/отключение/уничтожение ZConnection - память не теряется.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837187
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh,
память в наборах не теряется, а расходуется. что бы не расходовалась, не стоит в наборах держать много записей
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837199
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем понимаю, зачем держать наборы после того, как я уничтожаю ZQuery. Да и выбираю я каждый раз не более 10 строк из таблицы без BLOB. Откуда такой расход?

Да, оставил тестовую систему работать на ночь. Сейчас в таблице более 80 000 строк и продолжает работать.
Приложение в памяти (по диспетчеру задач) стало занимать с 10 мб при запуске 903 мб теперь !!!

Но пока работает.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837207
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще, видимо нужно двигаться в сторону пула соединений. Как вариант, это жор памяти может быть связан с тем, что, как я уже писал, в новом потоке создается соединение, а по завершении потока - уничтожается. А Zeos тянет клиентскую DLL от MySQL.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837208
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что нагуглилось:

ZeosLib/TConnectionPool

https://github.com/delphipascal/zeoslib/blob/master/zeos-7.0.4/src/dbc/ZDbcPooled.pas
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837209
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле, что возможно в Zeos уже есть класс пула соединений.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837215
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, спасибо, буду смотреть. Хотя.... я сам ведь уже писал, что если убрать запрос, и оставить только создание и уничтожение коннекта, то память не расходуется.... прям заколдованный круг какой-то.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837268
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что у вас в той части, которую "убираете"? Только лишь создание датасета, его открытие и уничтожение? Или ещёчто-нибудь?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837270
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот весь тестовый код:

Код: 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.
      ZConnection:=TZConnection.Create(Self);
      ZConnection.User:='user';
      ZConnection.Password:='11112222';
      ZConnection.Database:='db_test';
      ZConnection.HostName:='192.168.1.152';
      ZConnection.LibraryLocation:='C:\Program Files (x86)\MySQL\MySQL Server 5.7\lib\libmysql.dll';
      ZConnection.Port:=3307;
      ZConnection.Protocol:='mysqld-5';
      ZConnection.Connected:=True;


      ZQuery:=TZQuery.Create(Nil);
      ZQuery.Connection:=ZConnection;


      ZQuery.SQL.Clear;
      ZQuery.SQL.Add('Select * from  test_table limit 0,1');



       ZQuery.Open;

       CreateGUID(MyGUID);
       Str_MyGUID:=GUIDToString(MyGUID);  // P_Key
       Delete(Str_MyGUID,1,1);
       Delete(Str_MyGUID,37,1);


      ZQuery.Append;

      ZQuery.FieldByName('record_id').AsString:=Str_MyGUID;
      ZQuery.FieldByName('unix_timestamp').AsInteger :=DateTimeToUnix(Now)-10800;
      ZQuery.FieldByName('time_begin').AsInteger :=DateTimeToUnix(Now)-10800;
      ZQuery.FieldByName('room_id').AsString:='6D4E0BC7-4265-41B9-8DE6-A6C54B28805E';

      ZQuery.Post;


      ZQuery.EmptyDataSet;


      ZQuery.Close;
      ZQuery.Free;

      ZConnection.Connected:=False;
      ZConnection.Free;



Соответственно, убирал все, что относиться к ZQuery. Но тут выяснилась еще интересная штука. Похоже, я был не совсем прав в отношении того, что память уходит ZQuery. Если сделать один коннект (визуальный, на форме) и к нему цеплять динамически создаваемые ZQuery, то память похоже не теряется. Правда, в таком кривом режиме это все работает на несколько сот строк, потом падает. Но занятая память практически не растет.

Похоже, нужно самым серьезным образом подумать про пул соединений. Но про использование ZeosLib/TConnectionPool не нашел вообще ничего! И на западных форумах люди пишут про то же - ничего нет.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837285
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимаю Self в этом коде?

Код: pascal
1.
ZConnection:=TZConnection.Create(Self);



Вы же в потоке TThread, или я путаю?
Но вообще, в любом случае здесь лучше nil.

Так же, вы уверены, что по ходу не вылетает исключение? У вас нет try..except чтобы эио проверить. Но это не так важно, как то, что освобождения лучше упаковать в try..finally. Вдруг в этом причина утечки памяти...
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837302
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроик Семён,

Спасибо за помощь!

Пробовал и с nil - разницы в данном случае нет. На самом деле вчера поздно вечером сделал try..except и счетчик. За ночь на 79000 вставок всего одна ошибка - какая, не скажу правда. Теперь на всякий случай сделал освобождение в try..finally. Но потребляемая память как росла, так и растет.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837331
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh,

Может попробовать на офф-форуме Zeos это спросить?..
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837344
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и попробуйте FastMM4. Его надо будет первым в USES'e в .dpr-файле проекта поставить. От FastMM4 много пользы: ускорение программы, лучшая работа с кучей, диагностика утечек памяти.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837362
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подумал... в Delphi с 2006-ой версии итак стоит урезанная версия FastMM4.
Но все-равно, попробуйте с полной, вдруг поможет как-нибудь.
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837394
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Форум Zeos попробую конечно, но наши зарубежные коллеги что-то не очень о нем отзываются. Видел там подобное сообщение, что ZQuery жрет память, сошлись что это проблема OC (не понимаю). А про ихний пуд коннектов вообще никто не ответил. Как будто он сам себя написал (этот модуль) Ж-)
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837403
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще с ADO облом не реальный конечно.
Zeos - в отличие от ADO пишет хотя бы. Но память, память....
MySQLDirect - это еще 2005 год.

Может еще что-то есть?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837409
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh> А вообще с ADO облом не реальный конечно.

Кто и где делает CoInitFlags:=COINIT_MULTITHREADED?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837413
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/* пока другие не ответят */


вариант 1
готовы выделить 200$ (или 300$ если с исходниками) за MyDAC ? ( https://www.devart.com/mydac/editions.html )


вариант 2
вот попался продукт 2009 года. Может и хватит вам, если заведется конечно. Там и примеры есть, в том числе и многопоточные. Только оформлен не в виде компонентов, а в виде библиотеки функций для доступа к MySQL.

mysql.pas ( http://www.audio-data.de/mysql.html )
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837444
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
сейчас заметил, mysql.pas (вариант 2) лицензирован Mozilla Public License Version 1.1
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837610
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попробовать с памятью поискать концы самому, если сильно нужно
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837627
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 2015 году уже искали - и решения не нашли, похоже.
http://zeoslib.sourceforge.net/viewtopic.php?t=20838


P.S От отчаяния опять вернулся к ADO. Четыре клиента долбят сервер. Более 20 000 записей уже в базе. Приложение занимает в памяти 17,6 мб, а не 300-500-800 как с Zeos. Что за...


Код: 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.
Try

      AConnection:=TADOConnection.Create(Nil);
      AConnection.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=My_SQL;Initial Catalog=db_video';
      AConnection.Connected:=True;


      AQuery:=TADOQuery.Create(Nil);
      AQuery.Connection:=AConnection;


      AQuery.SQL.Clear;
      AQuery.SQL.Add('Select * from  record_table limit 0,1');

       AQuery.Open;

       CreateGUID(MyGUID);
       Str_MyGUID:=GUIDToString(MyGUID);  // P_Key
       Delete(Str_MyGUID,1,1);
       Delete(Str_MyGUID,37,1);


      AQuery.Append;

      AQuery.FieldByName('record_id').AsString:=Str_MyGUID;
      AQuery.FieldByName('unix_timestamp').AsInteger :=DateTimeToUnix(Now)-10800;
      AQuery.FieldByName('time_begin').AsInteger :=DateTimeToUnix(Now)-10800;
      AQuery.FieldByName('room_id').AsString:='6D4E0BC7-4265-41B9-8DE6-A6C54B28805E';

      AQuery.Post;


      AQuery.Close;
      AQuery.Free;

      AConnection.Connected:=False;
      AConnection.Free;




      Str_MyGUID:='';

        Except
          Unit3.Err_Count:=Unit3.Err_Count+1;
          Form3.Label1.Caption:='DB_Err='+IntToStr(Unit3.Err_Count);

        End;
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837636
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, за прямое обращение к визуальному компоненту из потока не ругайте - мы тут более серьезные проблемы ловим
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837639
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksVoronezh> Четыре клиента долбят сервер. Более 20 000 записей уже в базе
Фигня. Тут и тормозов-то нет. Зачем тебе потоки?
____________
И всё таки, где сидит CoInitFlags := COINIT_MULTITHREADED?
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837648
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я полагаю, что приложение само "понимает", что нужно работать в многопоточном режиме, благодаря тому, что в Intraweb, а именно в IWServerController, свойство ComInitialization установлено в "ciMultiThreaded"
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837654
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, я вообще не уверен, что для моего приложения обязателен "многопоточный апартамент", что, по идее, и делает и COINIT_MULTITHREADED, и ComInitialization = "ciMultiThreaded"

Вероятно, достаточно и отдельных апартамент на каждый поток. Нужно попробовать с ComInitialization = "ciNormal"...
...
Рейтинг: 0 / 0
Опять сбоит ADO в Intraweb с ciMultiThreaded
    #39837658
AleksVoronezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Фигня. Тут и тормозов-то нет. Зачем тебе потоки?

Извиняюсь, просмотрел сначала. Дело в том, что у меня по сути сервер, обслуживающий в Intraweb GET-запросы в событии TIWServerController.IWServerControllerBaseBeforeDispatch. А тут, как я понимаю, новый поток и стартует. Он же участвует в обработке запросов от клиентов, тех же браузеров.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять сбоит ADO в Intraweb с ciMultiThreaded
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]