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

Вниз

Кто работал с 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
7-19897
ych_boriss
2003-02-13 04:03
2003.04.07
футкция RasEnumDevices. Кто знает, как ей пользоваться?


3-19475
zloy_dima
2003-03-19 14:16
2003.04.07
ADO


1-19683
antoniz
2003-03-26 09:12
2003.04.07
Есть файл проекта, как из командной строки забилдить его


14-19782
Satirus
2003-03-19 15:07
2003.04.07
wowexec.exe


14-19800
Игорь Досужев
2003-03-19 17:18
2003.04.07
Как использовать