Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 813

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Помогите построить правильный алгоритм взаимодействия с бд. Меня интересует моменты нештатных ситуаций - отсутствия сервера. Я использую компонент ADOConnection. я его сразу в свойствах компонента выставляю в connected true и когда сервера нет, возникает ошибка. Как правильно работать с ним? подключаться к базе непосредственно перед запросом и отключаться после?

AlexMPEI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: AlexMPEI (статус: 1-ый класс)
Вопрос отправлен: 25 февраля 2010, 11:44
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 4 марта 2010, 02:38; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 25 февраля 2010, 12:45 [#1]:

лучше в FormCreate делать явное подключение, заключенное в try except. много проблем сразу пропадет.
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 25 февраля 2010, 13:03 [#2]:

ок.
1)как быть если сервера нет и мы попали в эксепт? по таймеру попробовать подключиться через некоторый таймаут?
2) как быть в случае пропадания сервера (в процессе работы после успешного подключения)? заключать все запросы к бд в try except и в случае ошибки опять пытаться переподключиться?
Вадим К

Вадим К (статус: Академик), 25 февраля 2010, 13:23 [#3]:

все зависит от логики программы. некоторые в случае пропадания базы могут вообще отказываться работать.
Поэтому переподключатся или нет - это Ваше решение.
А что бы "все запросы не заключать в try except", в нормальных системах разделяют уровень логики и уровень базы данных и для выполнения запросов есть только одна функция ExecSQL (к примеру), но она не доступна с уровня логики. Поэтому никаких проблем.
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

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, но ход выполнения программы при этом ломается и я получаю непроинициализированное окно. Может я что не так делаю?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.03 сек.