Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.11;
Скачать: CL | DM;

Вниз

Создание компонент в рантайм в отдельном потоке   Найти похожие ветки 

 
Sam   (2003-08-18 19:12) [0]

Уважаемые мастера, как создать BDE компонент TDataBase в отдельном потоке?
Я делаю так: есть TSostread = class(TThread), у него метод procedure TSostread.LdSostaw;
var
DBFBase : TDataBase;
begin
DBFBase.Create(nil);
DBFBase.AliasName:="ForOracle";
DBFBase.DatabaseName:="main";
DBFBase.Connected:=True;
end;
А дальше обработчик TSostread.Execute переопределяется следующим образом:
procedure TSostread.Execute;
begin
repeat
try
Synchronize(LdSostaw);
except on Ex: Exception do
fExceptionMessage:=Ex.Message;
end
until Terminated;
end;
При запуске такого потока возникает Access Violation в момент выполнения DBFBase.Create(nil);
В чем тут дело?
Заранее спасибо.


 
Polevi ©   (2003-08-19 09:45) [1]

во первых ты создаешь TDatabase в основном потоке
во вторых ты создаешь очень много TDatabase


 
Digitman ©   (2003-08-20 09:55) [2]


> Sam


перевожу тебе на русский то, что ты понаписал :

procedure TSostread.Execute;
begin
repeat // повторять нижеследующее
try // а имеенно - попытка
Synchronize(LdSostaw); // выполнить процедуру LdSostaw в осн.код.потоке, всякий раз при выполнении LdSostaw пытаться выполнить чертовщину, которая гарантированно вызовет исключение
except on Ex: Exception do // в случае возникновения исключения (а оно обязательно возникнет !)
fExceptionMessage:=Ex.Message; // зафиксировать текст его сообщения
end
until Terminated; // до тех пор пока флаг завершения не будет = True
end;

теперь - о "чертовщине" :

var
DBFBase : TDataBase;
begin
// DBFBase.Create(nil); // вот она !
// правильным же будет так
DBFBase := TDataBase.Create(nil); // !!!!!!!!



Страницы: 1 вся ветка

Текущий архив: 2003.09.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
1-33567
Support1
2003-08-28 19:23
2003.09.11
- Проблема с компонентом


3-33525
ЕвгенийЕ
2003-08-19 13:53
2003.09.11
Связанное поле, но не LookupDataSet через индексы?


1-33582
Luc
2003-08-28 15:45
2003.09.11
Как получить Sender а по левому клику мышкой?


3-33459
SPIRIT
2003-08-20 15:04
2003.09.11
Ошибочный аргумент


3-33428
Доброжелатель
2003-08-22 10:43
2003.09.11
ZeosDBO