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

Вниз

Что может из БДЕ вызвать причины зависания в потоке с таблицей?   Найти похожие ветки 

 
Aleksandr ©   (2003-04-08 19:44) [0]

Понял я, что через OpenDataSource мне не светит наладить сброс таблицы. Не могу понять - в программе есть сотня потоков, работающих каждый с индивидуальной SQL-таблицей. По запросу пользователей СКуЛьная таблицы скидывается в Парадокс. Но вот при каких-то хитрых причинах поток при скидке таблицы может зависнуть, никак не обрабатываясь try...except или try...finally.
Кто-нибудь встречал такое, чтобы на попытке открыть/обновить таблицу она вешала поток?

Процедурка создания таблицы в Парадоксе:




procedure SQLMakeTableForOut;
var
TmpName : string;
TrName : string;
SrcName : string;
OutTable : TTable;
TmpOutBasesDir : string;
AQuery : TADOQuery;
Local : string;
Lang : string;
begin
try
if NOT MasterTbl.TblItem[FIDT].Exists then //есть ли такая таблица вообще
Exit;
TmpOutBasesDir := OutBasesDir;
TmpName:=TmpOutBasesDir+ExtractFileName(TableFName);
SrcName:=BasesDir+ExtractFileName(TableFName);
try
if (NOT FileExists(TmpName)) OR (NOT IsTrueDate(TableTime,FileAge(TmpName))) then begin
if NOT FileExists(SrcName) then
Exit;
AQuery:=MasterTbl.GetADOQuery; //создать АДО-компоненту
try
AQuery.SQL.Add("SELECT * FROM "+MasterTbl.TblName[FIDT]);
case MasterTbl.GetTablePXFields(FIDT) of
1 : AQuery.SQL.Add("ORDER BY 1");
2 : AQuery.SQL.Add("ORDER BY 1,2");
end;
AQuery.FieldDefs.Update;
OutTable:=TTable.Create(nil);
try
OutTable.TableName:=ExtractFileName(SrcName);
OutTable.DatabaseName:=BasesDir;
OutTable.TableType:=ttParadox;
//проинициализировали таблицу-шаблон, с которой будет рисоваться таблица на выход
try
if MasterTbl.TblItem[FIDT].PXFields>0 then begin
if NOT FileExists(ChangeFileExt(SrcName,".px")) then begin
case MasterTbl.TblItem[FIDT].PXFields of
1 : Lang:=AQuery.FieldDefs[0].Name;
2 : Lang:=AQuery.FieldDefs[0].Name+";"+AQuery.FieldDefs[1].Name;
end;
OutTable.AddIndex("",Lang,[ixPrimary])
end
end;

вот если перед и после этой строчки поставить запись в лог, то будет первая строчка, а затем поток зависнет. Впрочем, то же будет при попытке открыть таблицу.
OutTable.FieldDefs.Update;

OutTable.IndexDefs.Update;
OutTable.DatabaseName:=TmpOutBasesDir;
if OutTable.Exists then
OutTable.DeleteTable;
OutTable.CreateTable;
Lang:=GetLocale(SrcName);
if Lang="ascii" then
ChangeLocale(TmpOutBasesDir,OutTable.TableName,"cyrr");
Local:=MoveDataFromADO(AQuery,OutTable);//функция непосредственной записи в таблицу из таблицу
if Local<>"" then begin
WriteLog(LogFilesDir+"TBLLogs\"+TableName+"qr.log",lmInformation,"I"," : moving data from ADO - "+Local);
Exit
end;
if Lang="ascii" then ChangeLocale(TmpOutBasesDir,OutTable.TableName,Lang)
except
on E:Exception do
LogDBException( DBItemLogIDChar, """ + TableName +"""+ " SQLMakeTableForOut ", E)
end
finally
FreeAndNil(OutTable)
end
finally
AQuery.Close;
FreeAndNil(aQuery)
end
end;
except
on E:Exception do
LogDBException( DBItemLogIDChar, """ + TableName +"""+ " SQLMakeTableForOut ", E)
end
except
on E:Exception do
LogDBException( DBItemLogIDChar, """ + TableName +"""+ " SQLMakeTableForOut ", E)
end
end;


 
sniknik ©   (2003-04-08 23:24) [1]

> в программе есть сотня потоков
не вдаваясь в подробности (текст разбирать лень)
но
вроде есть некоторые ограничения.
1) BDE на количество открытых сессий, со сдандартными настройками 7-8 и максимум 32, вроде, может память и "сбоит" но не сто точно, а по правильному нужно отдельную сессию а поток.
2) ограничение виндов на количество потоков в одном процессе (вроде бы 64) но дело это темное сам за документацией порыскай.
3) зря ты с OpenDataSource до конца не разобрался, это работает точно (довольно просто, и очень быстро, не нужно будет столько потоков). кстати возможно тебе просто надо поставить последнюю версию MDac и Jet. потом есть еще линк сервер, посмотри может тебе это проще будет (в Bol).



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

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

Наверх




Память: 0.47 MB
Время: 0.019 c
14-91475
Bombermen
2003-04-09 19:36
2003.04.28
игры


6-91430
Ocean
2003-03-04 12:14
2003.04.28
IdPOP31: как получить attachment?


6-91428
dums
2003-03-05 17:50
2003.04.28
анонимность клиента при работе с ISAPI DLL??


1-91361
Delphinium
2003-04-16 08:42
2003.04.28
Обновление под Delphi 5


8-91409
stim24
2003-01-24 11:14
2003.04.28
Проблема или ГЛЮК DELPHIX