|
Вопрос # 3 813/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Помогите построить правильный алгоритм взаимодействия с бд. Меня интересует моменты нештатных ситуаций - отсутствия сервера. Я использую компонент ADOConnection. я его сразу в свойствах компонента выставляю в connected true и когда сервера нет, возникает ошибка. Как правильно работать с ним? подключаться к базе непосредственно перед запросом и отключаться после?
 |
Вопрос задал: AlexMPEI (статус: 1-ый класс)
Вопрос отправлен: 25 февраля 2010, 11:44
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 4 марта 2010, 02:38; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 25 февраля 2010, 12:45 [#1]:
лучше в FormCreate делать явное подключение, заключенное в try except. много проблем сразу пропадет.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
AlexMPEI (статус: 1-ый класс), 25 февраля 2010, 13:03 [#2]:
ок.
1)как быть если сервера нет и мы попали в эксепт? по таймеру попробовать подключиться через некоторый таймаут?
2) как быть в случае пропадания сервера (в процессе работы после успешного подключения)? заключать все запросы к бд в try except и в случае ошибки опять пытаться переподключиться?
|
|
Вадим К (статус: Академик), 25 февраля 2010, 13:23 [#3]:
все зависит от логики программы. некоторые в случае пропадания базы могут вообще отказываться работать.
Поэтому переподключатся или нет - это Ваше решение.
А что бы "все запросы не заключать в try except", в нормальных системах разделяют уровень логики и уровень базы данных и для выполнения запросов есть только одна функция ExecSQL (к примеру), но она не доступна с уровня логики. Поэтому никаких проблем.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
AlexMPEI (статус: 1-ый класс), 4 марта 2010, 02:38 [#4]:
написал я следующую функцию для подключения к базе :
function TForm1.connectToDB: boolean;
begin
if (not ADOConnection1.Connected) then
begin
try
ADOConnection1.Open;
ADOConnection1.Connected := true;
result := true;
except
ADOConnection1.Close;
ADOConnection1.Connected := false;
gui.drowServiceMessage(true, 'Database unavailable! check server state!', '');
result := false;
end;
end
else
begin
try
ADOQuery4.Close;
ADOQuery4.SQL.Text := 'SELECT DISTINCT Author FROM MusicTable';
ADOQuery4.Open;
result := true;
except
ADOConnection1.Close;
ADOConnection1.Connected := false;
gui.drowServiceMessage(true, 'Database unavailable! check server state!', '');
result := false;
end;
end;
end;
вызываю я ее из FormCreate. я попадаю в except, но ход выполнения программы при этом ломается и я получаю непроинициализированное окно. Может я что не так делаю?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|