Форум: "Начинающим";
Текущий архив: 2010.09.05;
Скачать: [xml.tar.bz2];
ВнизНе добавляется информация в БД Найти похожие ветки
← →
СержК (2010-06-08 09:09) [0]Мастера подскажите.
Лет семь назад была написана программа на D7 (БД - InterBase 5.6, дотуп к БД организован через BDE Administrator).
Это ПО (сама программа, сервер IB) были установлены на сервере (2 интеловских 2-х ядерных процессора) - все работало без проблемм много лет.
Но по причине поломки железяки пришлось все переустановить на другое железо (четырехядерный Xeon).
Стал замечать глюки. После запуска программы (она крутится постоянно на сервере там же где установлен IB) все работае отлично. Там организовано в цикле добавление информации в БД. Так вот - через какое-то время информация в БД перестает добавляться. После перезапуска программы все работает,а через какое-то время глюки опять повторяются.
Огромная просьба - подскажите в чем проблемма?
← →
sniknik © (2010-06-08 09:20) [1]знаменитая ошибка 17-й строки... осложненная отсутствием логов и скрытием ексептов, похоже. и возможно завязанная на версию IB, системы и взаимодействие их с BDE.
← →
СержК (2010-06-08 09:30) [2]Как решить это...???
← →
brother © (2010-06-08 09:31) [3]> Как решить это...???
в [1] намек на отсутствие уточняющей информации и кода ;)
← →
sniknik © (2010-06-08 09:34) [4]> Как решить это...???
категория ошибок из 17-строки нерешаема в принципе... или принципиально, что для автора несущественно.
← →
СержК (2010-06-08 09:41) [5]Привожу код: Все это выполняется в цикле
QueryCloseDefect.ParamByName("pDATE_REMONT").AsDateTime:=StrToDate(Str_Data_Remo nt);
QueryCloseDefect.ParamByName("pFIO_REMONT").AsBlob:=Str_FIO_remont;
QueryCloseDefect.ParamByName("pTEXT_REMONT").AsBlob:=Str_TEXT_Remont;
QueryCloseDefect.ParamByName("pNAME_TXT_FILE_DEFECT").AsString:=Trim(Str_Name_Cl ose_File);
Database1.StartTransaction;
QueryCloseDefect.ExecSQL;
if Database1.InTransaction then Database1.Commit;
Вот сам запрос:
Update Gurnaldefect Set
DATE_REMONT = :pDATE_REMONT,
FIO_REMONT = :pFIO_REMONT,
TEXT_REMONT = :pTEXT_REMONT
Where NAME_TXT_FILE_DEFECT=:pNAME_TXT_FILE_DEFECT
← →
sniknik © (2010-06-08 10:00) [6]> через какое-то время информация в БД перестает добавляться.
> Вот сам запрос:
> Update Gurnaldefect Set
> ...
я тебя наверное разочарую, но она тут совершенно правильно не добавляется...
p.s. еще один такой пост и из категории "в принципе"(что изменимо) вопрос перейдет в категорию "принципиально".
← →
СержК (2010-06-08 10:19) [7]Постараюсь описать проблеммму подробнее.
Действительно я привел код на изменение записи в таблице БД (существует конечно и на добавление записи). Дело в следующем - после запуска программы через какое-то время перестает добавляться ЛЮБАЯ информация в БД (как изменение существующей записи в таблице БД, так и добавление новой записи). Все это проявилось при переходе на новое железо.
Да вот еще..
С данной БД работают несколько пользователей на своих рабочих станциях со своими клиентскими приложениями. У них проблемм НЕТ (добавляют, изменяют, удаляют).
← →
brother © (2010-06-08 10:23) [8]ну, это уже неуважение...
мы всю информацию из тебя клещами будем тянуть?
оказывается она еще и сетевая... и там все гуд...
← →
RWolf © (2010-06-08 10:39) [9]базу на ошибки проверяли?
← →
Anatoly Podgoretsky © (2010-06-08 10:40) [10]
> СержК (08.06.10 09:41) [5]
Никаким добавлением и не пахнет, нет задачи для решения.
← →
Sergey13 © (2010-06-08 10:41) [11]> [7] СержК (08.06.10 10:19)
> С данной БД работают несколько пользователей на своих рабочих
> станциях со своими клиентскими приложениями. У них проблемм
> НЕТ (добавляют, изменяют, удаляют).
> [0] СержК (08.06.10 09:09)
> дотуп к БД организован через BDE Administrator).
Неужели трудно выявить разницу? Если сервер и БД одни и те-же, программа одинакова, то очевидно, что разные какие-то настройки. Настройки тут, насколько я понял, возможны только в БДЕ. Сравни их на сервере и на клиентских станциях. Скорее всего проблема в них.
← →
СержК (2010-06-08 10:44) [12]Да она сетевая. Время от времени работают 5-15 пользователей без проблемм в течении нескольких лет. И сейчас у них все отлично.
Проблемма возникла ТОЛЬКО с маленькой програмкой которая крутится локально там же где установлен IB сервер. Через некоторое время перестает добавляться/изменяться любая информация в БД. После перезапуска этой "маленькой" проги какое-то время все нормально (несколько часов) потом опять те же грабли...
← →
СержК (2010-06-08 10:49) [13]Может я чего-то не понимаю... Если проблемма в настройках BDE, то почему кокое-то время после запуска все работает отлично и только через несколько часов начинается...
← →
Sergey13 © (2010-06-08 11:00) [14]> [13] СержК (08.06.10 10:49)
Ну так сравни, найди отличия и почитай про эти отличия.
← →
СержК (2010-06-08 11:09) [15]Да нет этих отличий - уже сравнил.
← →
Sergey13 © (2010-06-08 11:26) [16]> [15] СержК (08.06.10 11:09)
Попробуй запустить "серверную" программу на клиентской машине.
← →
Anatoly Podgoretsky © (2010-06-08 11:27) [17]> СержК (08.06.2010 10:44:12) [12]
Программу надо переписать.
← →
sniknik © (2010-06-08 11:30) [18]настройки при поиске глюков вторичны, первичны сообщения от эксептов в момент между "все работает" и "все поломалось".
← →
12 © (2010-06-08 11:31) [19]логгируйте действия
после каждой команды серверу - в лог, время, что послано, что вернулось
← →
Anatoly Podgoretsky © (2010-06-08 11:38) [20]> sniknik (08.06.2010 11:30:18) [18]
Это хорошие "все поломалось" исключения
← →
СержК (2010-06-08 11:46) [21]"Серверная" программа на клиентской машине работает нормально. На своей машине (в отладчике в том числе) все отлично.
Предполагаю что глючит BDE??? Кстати BDE критичен к железу?
Может переписать "серверную" програмку без использования BDE?
← →
СержК (2010-06-08 11:56) [22]
> sniknik © (08.06.10 11:30) [18]
> настройки при поиске глюков вторичны, первичны сообщения
> от эксептов в момент между "все работает" и "все поломалось".
>
как мне получить эту информацию на примере вышеприведенного кода?
← →
sniknik © (2010-06-08 11:58) [23]> Может переписать "серверную" програмку без использования BDE?
Anatoly Podgoretsky © (08.06.10 11:27) [17]
> Программу надо переписать.
зачем уточнения?
только переписать нужно грамотно, с BDE, без BDE это дело десятое.
← →
sniknik © (2010-06-08 12:00) [24]> как мне получить эту информацию
try except ... + возможно Win32Check
← →
СержК (2010-06-08 12:18) [25]
> sniknik © (08.06.10 12:00) [24]
> > как мне получить эту информацию
> try except ... + возможно Win32Check
Буду очень признателен если подскажите как все это применить к данному коду:
QueryCloseDefect.ParamByName("pDATE_REMONT").AsDateTime:=StrToDate(Str_Data_Remo nt);
QueryCloseDefect.ParamByName("pFIO_REMONT").AsBlob:=Str_FIO_remont;
QueryCloseDefect.ParamByName("pTEXT_REMONT").AsBlob:=Str_TEXT_Remont;
QueryCloseDefect.ParamByName("pNAME_TXT_FILE_DEFECT").AsString:=Trim(Str_Name_Cl ose_File);
Database1.StartTransaction;
QueryCloseDefect.ExecSQL;
if Database1.InTransaction then Database1.Commit;
← →
Anatoly Podgoretsky © (2010-06-08 12:19) [26]> СержК (08.06.2010 11:46:21) [21]
Конечно, всегда виновата система, а не программист.
← →
Anatoly Podgoretsky © (2010-06-08 12:30) [27]> СержК (08.06.2010 12:18:25) [25]
Твой код надо выбросить.
← →
СержК (2010-06-08 12:33) [28]
> Anatoly Podgoretsky © (08.06.10 12:30) [27]
> > СержК (08.06.2010 12:18:25) [25]
>
> Твой код надо выбросить.
Согласен подскажите правильный код.
← →
RWolf © (2010-06-08 13:18) [29]
> Anatoly Podgoretsky © (08.06.10 12:30) [27]
а что не так в [25] ?
← →
12 © (2010-06-08 14:09) [30]как то так
try
> QueryCloseDefect.ParamByName("pDATE_REMONT").AsDateTime:
> =StrToDate(Str_Data_Remo nt);
> QueryCloseDefect.ParamByName("pFIO_REMONT").AsBlob:=Str_FIO_remont;
>
> QueryCloseDefect.ParamByName("pTEXT_REMONT").AsBlob:=Str_TEXT_Remont;
>
> QueryCloseDefect.ParamByName("pNAME_TXT_FILE_DEFECT").AsString:
> =Trim(Str_Name_Cl ose_File);
>
> Database1.StartTransaction;
> QueryCloseDefect.ExecSQL;
> if Database1.InTransaction then Database1.Commit;
except
on E:Exception do
begin
E.Message := E.Message + #13#10 + " Вот тута пошла фигня.. ";
Raise;
end;
end;
Компонент TApplicationEvents
procedure TfrmEditRequest.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
InitLog(E,true);
end;
Procedure InitLog(E:Exception; Show:boolean = false);
Begin
if frmLog = nil then frmLog := TfrmLog.Create(application);
frmLog.memLog.Lines.Add("Произошла ошибка: " + E.ClassName + "/" + E.Message);
if Show then frmLog.Show;
End;
← →
СержК (2010-06-08 14:21) [31]
> 12 © (08.06.10 14:09) [30]
Попробую. Будут результаты - отпишусь.
Спасибо.
← →
Anatoly Podgoretsky © (2010-06-08 14:23) [32]
> а что не так в [25] ?
Хотя бы отсутствие try except
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.05;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.003 c