![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с БД в потоках [D7, MSSQL]
altarasjuk © (2003-03-02 13:05:00)Доброго времени суток.
Есть TADOConnection. Есть 2 TADOQuery в разных потоках .Connection:= TADOConnection. и выполняется примерно такой код:
Поток1:
var
query1: TADOQuery;
begin
query1:= TADOQuery.Create(nil);
query1.Connection:= Bconnection; {Bconnection: TADOConnection}
query1.SQL.Add("Select * from ....");
query1.Active:= TRUE;
..............
Поток2:
var
query2: TADOQuery;
begin
query2:= TADOQuery.Create(nil);
query2.Connection:= Bconnection; {Bconnection: TADOConnection}
query2.SQL.Add("Select * from ....");
query2.Active:= TRUE;
..............
если выполняется тока один квери то всё ок, а если выполняются 2 одновременно, то получаю набор от Access Voilation до Invalid Pointer Operation, а бывает что асмовское окно (курсор на Push ...) и там валиться и отловить это фиг получается.
Может кто объяснит чё это твориться...
Зараннее благодарен.
sniknik (2003-03-02 13:21:00) [1]добавь к каждому потоку Connection1:= TConnection.Create(nil); и т.д. (связь).
если у тебя не так, и компенент гденибудь на форме, то он работает в главном потоке программы при доступе из других возникают колизии (глюки), нужна синхронизация. Но в длительных запросах синхранизация будет вешать основной, и смысл в доп.потоках нулевой.
+
в начале выполнения процедуры потока делай CoInitialize(nil); в конце CoUnInitialize();
Владислав (2003-03-02 13:19:00) [2]Так вроде в разных потоках Connection разные должны быть.