Форум: "Базы";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизКто работал с halcyon Найти похожие ветки
← →
_BasiL_ (2003-03-17 13:32) [0]Если БД испорченна, то как и где программно это узнать, в каких событиях?
← →
sniknik (2003-03-17 13:46) [1]там же где и у других на EDatabaseError exception (в блоке try exept ... end) при открытии таблици (для всей БД нужно все последовательно пооткрывать).
← →
_BasiL_ (2003-03-17 14:43) [2]Каким образом это осуществить не используя ВДЕ?
← →
sniknik (2003-03-17 14:56) [3]путаеш с чем то, с этим?
DbiError obtains the error string from the BDE for the error and raises an EDBEngineError exception.
а EDatabaseError обший не будет BDE он все одно будет. (без BDE работает) ->
try
HDataSet1.Close;
HDataSet1.DatabaseName:= PathZ;
HDataSet1.TableName:= "CURRESTS.DBF";
HDataSet1.Open;
exept
on E: EDataBaseError do begin ErrMessage:= "EDataBaseError : "+ E.Message; Err:= True; end;
end;
← →
PrettyFly (2003-03-17 15:12) [4]Испорти и посмотри, что будет ;)
← →
_BasiL_ (2003-03-17 15:55) [5]Если я вставляю этот код, то у меня БД открывается без проблем, а при добавлении (создании) индексного файла он пишет, что такого поля нет. Далее передвигаюсь по БД на неиспорченных записях все ОК, а как дохожу до каши, то вылазиет ошибка. Где ловить эту ошибку, в каком событии?
← →
Dred2k (2003-03-17 15:58) [6]Application.OnException
← →
myor (2003-03-17 16:02) [7]if db.demaged=true :)
определи условия(результаты, данные, события), которые ты считаешь ошибкой бд. а потом ищи их в своей бд.
не открывается бд: файл переименован? изменен путь? не зарегистрирован пользователь?
каша в бд: несоответствие типов данных? отсутствие данных?
← →
sniknik (2003-03-17 16:13) [8]_BasiL_ © (17.03.03 15:55)
при открытии таблици не делается ее тестирование/сканирование всех записей (куча времени потратится). по идее весь код работы с базой/(и не только), должен в try exept находится. и обрабатывать ошибки "по ходу программы".
← →
_BasiL_ (2003-03-17 16:23) [9]Под кашея я подразумеваю текст несоответствующий полям и их типам! На хороших записях программа работает корректно, когда доходит дело вот до этой каши программа ругается. Я хочу отловить эту ошибку и востановить (удалить) испорченные записи!
В стандартном Table ошибка ловиться в событии onDeleteError в Halcyon`е он даже в это событие и незаходит.
Где поймать эту ошибку, подскажите.
← →
_BasiL_ (2003-03-17 16:32) [10]sniknik © (17.03.03 16:13)
Получается, что перед каждым редактированием, post`ом надо проверять на ошибку и никак ее отловить в одном месте нельзя?
← →
sniknik (2003-03-17 16:54) [11]в одном месте(программы) точно нельзя, ведь по ходу работаеш с разными таблицами, записями.
любое действие с таблицей в try exept (post тоже) и обработку на случай ошибки. по другому некоректно (хотя если устраивают стандартные сообщения об ошибках) и откатов/обработок исключительных ситуаций не нужно, то почему нет? можеш без exept.
← →
myor (2003-03-17 17:04) [12]как это "в одном месте"?
ты уверен, что ошибка программная?
тогда определи, какая операция к этому привела (отталкивайся от побитых данных). а если это был разовый сбой? как ты хочешь определить причину? тут можно только попробовать восстановить бд (отбраковать битые данные).
← →
_BasiL_ (2003-03-17 17:08) [13]sniknik © (17.03.03 16:54)
Правильно пишется ex cept
Вот работающее событие стандартного Table
procedure TDM.OrdersDeleteError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if E is EDBEngineError then
if (E as EDBEngineError).Errors[0].Errorcode = eDetailsExist then
begin
if MessageDlg("Delete this order and related items?", mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
begin
{Delete related records in linked "items" table}
while Items.RecordCount > 0 do
Items.delete;
{Finally,delete this record}
Action := daRetry;
end else Abort;
end;
end;
При возникании ошибки можно удалить запись по желанию, вот что-то вроде этого и я хотел сделать с Halcyon`ом, но неполучается.
← →
sniknik (2003-03-17 17:17) [14]_BasiL_ © (17.03.03 17:08)
> sniknik © (17.03.03 16:54)
> Правильно пишется except
точно except, а ты думал чтобы на память да без ошибок?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c