Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизAdo и многопоточность Найти похожие ветки
← →
Vilux © (2004-03-21 15:27) [0]Какие "подводные камни" меня ждут при работе с БД (открытие, изменение, закрытие) мнопоточно? А то наблюдаются некоторые глюки. Я использую компоненты ADO. И еще вопрос, создаю SQL запрос INSERT, выполняю его в TAdoQuery, потом делаю SELECT, но эта новая запись не видится. Как мне обновить базу? Пробовал Ado.Close и потом Ado.Open, работает... но если сделать многопоточность, то и этот вариант не работает.
← →
KSergey © (2004-03-21 15:33) [1]TAdoQuery основного и дополнительного потока работают через 1 ADOConnection? Если да - то глюки будут. Если через разные - тогда пофигу, как я понимаю.
Проще использовать встроенный в ADO механизм асинхронного выполнения. Там все уже продумано за нас.
См. недавно была ветка про ту же тему.
> И еще вопрос, создаю SQL запрос INSERT, выполняю его в TAdoQuery,
> потом делаю SELECT, но эта новая запись не видится
Слабо в это верится, думаю все несколько не так, как описывается.
> Ado.Close и потом Ado.Open
Т.е. я не понял: а как же тогда "делаю SELECT"? Как его сделать иначе, чем Close/Open?
← →
YurikGl © (2004-03-21 15:34) [2]Если долго много и одновременно обращаться к базе Access через ADO, то база рушится. Это - подтвержденный факт. Критическим является многопользовательность
← →
YurikGl © (2004-03-21 15:36) [3]> И еще вопрос, создаю SQL запрос INSERT, выполняю его в TAdoQuery,
> потом делаю SELECT, но эта новая запись не видится
Это - так сам наблюдал. Поэтому нечасто пользуюсь SQL-коммандой insert. Чаще говорю insert на dataset
← →
KSergey © (2004-03-21 15:37) [4]Многопользовательность тут совершенно ни при чем.
Доступ многих клиентов каждого через свой коннект - это одно. Доступ в нескольких параллельных потоках через 1 коннект без синхронизации - совершенно другое.
← →
Vilux © (2004-03-21 16:40) [5]Для теста, я создал цикл, например до 100, где в основном потоке вызывал процедуру, которая создавала "на ходу" TAdoConnection и TAdoQuery, заносила в БД запись,а потом уничтожала их. И только потом запускался отдельный поток, в котором происходил UPDATE записи, которую я занес. В нем также создавались отедельные TAdoConnection и TAdoQuery. Глюки есть... Если же все это делать не многопоточно, то все нормально.
Еще одна проблема, делаю так
with TMyThread.Create(True) do
try
FreeOnTerminate := True;
Resume;
except
Free;
raise
end;
--------------------------------
TMyThread = class(TThread)
protected
..........
public
ado:TADOConnection;
query:TADOQuery;
end;
procedure TMyThread.Execute;
var
url:string;
status:boolean;
begin
url:="";
status:=false;
ado:=TADOConnection.Create(nil);<--Здесь пишет
"Не был произведен вызов CoInitialize"
Что я делаю не так?
...
end;
← →
Vilux © (2004-03-21 16:57) [6]И еще
"Это - так сам наблюдал. Поэтому нечасто пользуюсь SQL-коммандой insert. Чаще говорю insert на dataset"
Можно примерчик? Как осуществить insert на dataset?
← →
Desdechado © (2004-03-21 16:58) [7]зачем постить 10 раз одно и то же?
← →
Vilux © (2004-03-21 17:23) [8]Это тест...проверка... по идее, я создаю запись, а затем ее меняю. Так вот косяк в том, что не все записи потом меняются, если запускается поток...
P.S. Ны вышеприведенные вопросы, плиз, ответьте...очень надо... не знаю, уже как быть.
← →
Desdechado © (2004-03-21 17:40) [9]я имел ввиду сообщения в форум десятками одинаковые сыпать ...
← →
Vilux © (2004-03-21 17:57) [10]Форум недавно не принимал сообщения... а потом все сразу отослались... ес-но я не специально.
← →
YurikGl © (2004-03-21 19:15) [11]re [6]
ADODataSet.Insert;
ADODataSet.fields[0].value:=....
...
ADODataSet.fields[k].value:=....
ADODataSet.post;
← →
sniknik © (2004-03-21 22:47) [12]YurikGl © (21.03.04 15:34) [2]
> Если долго много и одновременно обращаться к базе Access через ADO, то база рушится. Это - подтвержденный факт. Критическим является
> многопользовательность
кем подтвержденный?
могу дать опровержение. за все время работы с базами access ни одной порушеной. хотя время работы немаленькое.
могу предположить что причиной скорее является некомпетентность программиста а не многопользовательность.
> Vilux © (21.03.04 16:40) [5]
> Глюки есть... Если же все это делать не многопоточно, то все нормально.
это не глюки. тебе как раз и говорят что необходим вызов CoInitialize, в основном потоке вызаватся автоматом(в одном из модулей прописан) и естественно нормально.
← →
YurikGl © (2004-03-21 23:27) [13]re [12]
>> кем подтвержденный?
Приведу два упоминания помимо моего
http://www.databases.ru/viewtopic.php?p=373&sid=d1221f5e3d8487bfad75d84d7a0eedcb
http://www.linux.org.ru/view-message.jsp?msgid=186100
"база ACCESS фактически, когда льют в нее более 10 чел одновременно, рушиться и восстановлению не подлежит, прямо караул какой-то !!! "
>>могу дать опровержение. за все время работы с базами access ни одной порушеной. хотя время работы немаленькое.
Наверно конкретная версия access не глюкавая.
З.Ы. С этим работал мой брат, могу узнать подробности.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c