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