Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Виды ошибок при подключении к БД


Автор: _andrews_ 9.3.2007, 19:46
Delphi 6, FireBifd, FibPlus
На форме есть диалог открытия файла--пользователь выбирает БД для подключения. Но подключить он может КОНКРЕТНУЮ БД, ту, какую МНЕ надо. Другие БД или другие файлы подключить нельзя. Фильтр по расширению есть, но также есть возможность открытия НУЖНОЙ МНЕ БД с другим расширением (*.*)
Как мне обработать ошибку, если пользователь полезет открывать ДРУГОЙ, не тот файл?
Делаю так:
Код

procedure ...;
var PathDBFr: String;
begin
  OpenDlgSaveDBFr.Execute;
  PathDBFr := OpenDlgSaveDBFr.FileName;
  try
    pFIBDataBase.DBName := PathDBFr;
    pFIBDataBase.Connected := true;
    pFIBTransaction1.Active := true;
    pFIBDataSetHumans.Active := true;
  except 
    ON //Здесь нужно указать тип ошибки, типа EDivByZero
    DO MessageDlg('Invalid database', mtConfirmation, mbOKCancel,0);
  end;
end;

Как это сделать?*
Какие вообще существуют типы ошибок при работе с БД?*
Спасибо

Автор: comtat 10.3.2007, 13:46
Код

except
  on E: EOleException do
        begin
           // Не верный путь к БД
           if (E.ErrorCode=-2147467259) then
           ...        
        end;


Код ошибки E.ErrorCode, E.Message - само сообщение

Автор: _andrews_ 10.3.2007, 17:21
EOleException-это что такое?*
"Необъявленный идентификатор" пишет

Автор: comtat 10.3.2007, 17:36
Цитата(_andrews_ @  10.3.2007,  17:21 Найти цитируемый пост)
EOleException-это что такое?*

Цитата
Description

EOleException is the exception class for errors specific to the OLE IDispatch interface.


Смотри HELP..

Автор: _andrews_ 10.3.2007, 17:42
Код

except
      ON E: EOleException  DO
        MessageDlg('Invalid database', mtError, [mbOK] ,0);
    end;

ну я вот так пишу-то он не знает, что это.. (Ctrl+Spase тоже там в списке такого нету(( )
может его как-то объявить раньше?*

Автор: comtat 10.3.2007, 18:27
Код

try
...твой код...
except
on e:Exception do
    begin
  ShowMessage(e.Message);
  ...твои действия в случае если твой код вызвал ошибку...
    end;
end;

Exception - Это ошибка, т.е. EZeroDivide - деление на ноль, и т.д.

в uses  добавь SysUtils

Автор: _andrews_ 10.3.2007, 18:38
Код

try
   pFIBDSHumans.Active := true;
except
   ON E: EDBEngineError  DO
   begin
     ShowMessage(e.Message);
     MessageDlg('Invalid database', mtError, [mbOK] ,0);
   end;
end;

Если подключаю "левую" БД-просто вылетает и выдает ошибку с полями БД  smile 

EDBEngineError имеет свойства ErrorCount и свойство-массив Errors: одна операция с базой данных может породить сразу несколько ошибок...Такое еще нашел...Но результат тотже((

Автор: comtat 10.3.2007, 18:59
Цитата(_andrews_ @  9.3.2007,  19:46 Найти цитируемый пост)
Как мне обработать ошибку, если пользователь полезет открывать ДРУГОЙ, не тот файл?

FileName пиши в OpenDialog,
если не будет совпадать, то выдавай ошибку... 

Автор: _andrews_ 10.3.2007, 19:06
мне нужно предусмотреть все ситуации (ну..как можно больше), в т.ч. и варианты переименования (зачем-то...еси пользователю стукнет, вдруг) файла БД и даже изменения расширения, а если я заранее укажу фиксированное имя-то...сами понимаете.. (( А как же быть с путем?* если путь изменится..нет..мне кажется не самый лучший вариант

Автор: Bose 11.3.2007, 21:36
_andrews_, при попытке подключения к некорректному файлу, корректное исключение будет возбуждено в компоненте доступа к базе данных. Разве не так? 

Автор: _andrews_ 12.3.2007, 11:27
Да! Спасибо за помощь! Заработало!!
Почему-то..))
Убрал блок ON...DO...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)