![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще раз о BDE [D5, Paradox]
Дмитрий К.К. © (2003-03-18 06:29:00)Вопрос к MsGuns, А.П. и другим специалистам по BDE.
Как известно даже начинающему, разрабатывающему приложения для работы с БД, если программа использует BDE, то и на любой другой станции, на которой будет запущена эта программа, тоже должен быть установлен BDE. В противном случае выскочит ошибка 2104 (сообщение о том, что BDE неинициализирован).
Вопрос в другом. Как опередить это сообщение и выдать свое собственное (вроде "Установите предварительно BDE")?
MsGuns (2003-03-19 15:18:00) [1]>Дмитрий К.К. © (19.03.03 08:12)
Точен так же как диагноз терапевта:
- Что-то у вас, молодой человек, не в порядке со здоровьем. Надо вам к специалисту !
Anatoly Podgoretsky (2003-03-19 15:06:00) [2]Сносить не надо, переименуй временно папку с БДЕ
Дмитрий К.К. (2003-03-19 08:12:00) [3]К сожалению, не могу проверить свой код, на моей машине установлен BDE, а сносить его (даже временно) пока не имею возможности.
Я помню, что приложение, использующее TTable, но не открывающее его, ошибку инициализации BDE выдавать не будет.
Вот этот мой код точен?
procedure TForm1.FormCreate(Sender: TObject);
begin
try
Table1.Open;
except
on EDBEngineError do ShowMessage("Нетуть BDE!");
end;
end;
MsGuns (2003-03-18 12:03:00) [4]>Reindeer Moss Eater (18.03.03 11:39)
>EDBEngineError генерится из недр БДЕ.
Генерится его значение, а как класс он "генерится" в приложении.
Так вот, сам объект TDBError имеет св-ва Category, SubCode и ErrorCode (Category + SubCode). Все эти ошибки определены как глобальные константы. В частности, в Category=SYSTEM есть
ERRCODE_DBIERR_NOCONFIGFILE ($2104) - нет BDE
ERRCODE_DBIERR_CANTFINDIDAPI ($2108) - не найден IDAPI.dll
Reindeer Moss Eater (2003-03-18 11:39:00) [5]EDBEngineError генерится из недр БДЕ.
Нет на машине БДЕ - некому будет генерить EDBEngineError.
MsGuns (2003-03-18 10:40:00) [6]Есть класс EDBEngineError, св-во которого Errors содержит объект TDBError, в котором в виде стэка хранятся все ошибки доступа
У этого же класса есть методы, один из которых, Exception, и позволяет самаму "инициировать" нужную ошибку.
Kuusiniemi (2003-03-18 10:08:00) [7]Ээээ... не надо извращаться, господа. Есть такая функция dbiInit называется. Если верить F1, то она вернет DBIERR_NONE, если The BDE environment was initialized successfully.
ЮЮ (2003-03-18 08:46:00) [8]> открыть таблицу или подключиться к БД.
Ошибка возможна из-за таблиц, а не BDE
Reindeer Moss Eater (2003-03-18 08:46:00) [9]>Виталий Панасенко
Можно подумать, что если не подключаться к БД, то и исключения не не будет.
Виталий Панасенко (2003-03-18 08:38:00) [10]Или в том же try ... except попытатся открыть таблицу или подключиться к БД.
ЮЮ (2003-03-18 07:11:00) [11]2)в try ... exept выполнить какую-либо API-функцию БДЕ, например динамически создать алиас