Есть компьютер под управлением Windows XP Embedded.
На нем стоит FireBird 1.5.3 - 4870
На компьютере работает программа, которая по расписанию запускает процесс опроса приборов учета.
Расписание находится в базе.
Данные с приборов вставляются в ту же базу.
Расписание пересчитывается из базы каждые 5 минут, или по событию БД.
Программы (для опроса приборов, и та, что следит за расписанием) написаны на BCB6 и Delphi 6, IBX последних версий.
Все запросы - и на вставку данных, и на чтение данных из БД, выполняются конструкциями вида:
TIBTransaction *tr=new TIBTransaction(this);
TIBSQL *qr=new TIBSQL(this);
tr->DefaultDatabase=SSDdb;
qr->Transaction=tr;
if(tr->InTransaction) tr->Commit(); tr->StartTransaction();
AnsiString qstring;
qstring= "update STIMETABLE set TYPECALL = :TYPECALL where typecall<>1";
qr->SQL->Add(qstring);
qr->GenerateParamNames=true;
if(tr->Active) tr->Commit(); tr->StartTransaction();
qr->GenerateParamNames=true;
qr->ParamByName("TYPECALL")->AsInteger=0;
qr->ExecQuery(); qr->Close(); tr->Commit(); delete qr; delete tr;
return 0;
Собственно, все это работает в течении некоторого времени. При попытке перезагрузки, комп повисает с некой ошибкой gds32.dll.
Поскольку все эти компы стоят без мониторов, и при зависе - их мануально перезагружают ресетом, то понять точно, какую ошибку дает gds32.dll не удается, к тому моменту как он зависает, RDP уже отключен.
Перезагрузка совершается программно по расписанию, вызовом bat файла, который контролирует корректное завершение основной программы, принудительно завершает все сеансы запросов данных, делает net stop "Firebird Server - DefaultInstance"
и вызывает перезагрузку. Но при перезагрузке - повисает.
Все это уже очень сильно напрягает.
Вопрос - как понять, из-за чего все валится ? эта перезагрузка очень нужна. Перезагружать по другому? Может ли это происходить из-за того, что каждый раз создается новая транзакция и новый запрос ? Но при запуске клиента для сбора данных там это все равно происходит. Куда копать ? Какие где логи смотреть ? Помогите плз.
