![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зависание программы при обращении к БД из отдельного потока [D6]
DelphiN! © (2007-03-23 08:24:00)Есть процедура, которая запускается из отдельных потоков и делает выборку из небольшой таблицы(<200 записей), а далее ищет и возвращает значение определененого поля, иногда при выполнении кода
DataSet.Open;все приложение зависает, без вывода каких либо ошибок, отладчик останавливается на данной строчке и далее выполнение не проходит, в чем может быть причина зависания ума не приложу, вот код данной процедуры :
function TDATA.IpToCardNo(IP: String): String;
var
DataSet: TIbDataSet;
Transaction: TIbTransaction;
begin
try
DataSet := TIbDataSet.Create(nil);
Transaction := TIbTransaction.Create(nil);
DataSet.Database := IBDatabase1;
Transaction.DefaultDatabase := IBDatabase1;
DataSet.Transaction := Transaction;
Result := '';
DataSet.SelectSQL.Text := 'SELECT * FROM SEANSES';
DataSet.Open; //Зависает программа тут
DataSet.FetchAll;
DataSet.First;
if DataSet.Locate('COMP_',IP,[loCaseInsensitive]) then
Result := DataSet.FieldByName('IsCard_').AsString;
finally
DataSet.Free;
Transaction.Free;
end;
end;
Сейчас есть мысли, что данная проблемма происходит, когда процедуру вызывают более N-ного числа потоков одновоременно и в следствии того что на компьютере установлена ОС Windows XP обладающая рядом ограничений на колличество сетевых подключений, подключение к БД не происходит, но почему не появляется сообщение об ошибке и программа просто зависает?
PS: Используется СУБД Firebird 1.5, база данных расположена на том-же компьютере, на котором осуществляется работа приложения
Заранее благодарен за любую помощь в решении данной проблеммы!
Sergey13 (2007-03-23 08:30:00) [21]А какой смысл тянуть весь (хоть и небольшой) набор данных на клиента? Почему не вытягивать только нужное поле по заданному IP-шнику тем же запросом?