Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.031 c
1-1080795275
GreatMaster
2004-04-01 08:54
2004.04.18
Генерация номеров вида "4E7A9129-A289-4B79-A71C-6883C016A0FE"


3-1079589072
Nax
2004-03-18 08:51
2004.04.18
Два вопроса по синтаксису TQuery.SQL


1-1080554509
СержК
2004-03-29 14:01
2004.04.18
Синхронизация системного времени


1-1080420173
oleg_SYS
2004-03-27 23:42
2004.04.18
Перетаскивание файлов


3-1079891555
neVIP
2004-03-21 20:52
2004.04.18
Эксклюзивный доступ к базе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский