Лучший способ подключения к базе данных для этого приложения - PullRequest
1 голос
/ 03 апреля 2009

У меня есть приложение Delphi, которое обращается к базе данных (обычно MySql) каждые 60 секунд через TTimer. Приложение является более или менее автоматической доской объявлений. Если сеть прерывается, приложение должно продолжить работу и подключиться к базе данных, когда соединение вернется. Часто это может быть по широкополосной связи, так что скорее всего, соединение не всегда является лучшим.

Я использую компонент TAdoConnection. Он открывается при запуске приложения и остается открытым. Всякий раз, когда мне нужно сделать новый запрос, я устанавливаю Connection для открытого TAdoConnection. Но я считаю, что это не очень надежно, если есть сбой сети.

Каков наилучший способ подключения к базе данных в этом случае? Я видел способы, где вы можете встроить строку подключения непосредственно в TAdoQuery. Будет ли это правильный путь? Или это чрезмерно ресурсоемкий? Иногда мне нужно открыть 5-10 запросов, чтобы получить всю информацию.

Или как сделать это в событии TTimer.OnTimer:

Создать TAdoConnection

Выполнить все запросы

Бесплатное TAdoConnection

Спасибо.

1 Ответ

5 голосов
/ 03 апреля 2009

Вы должны использовать один объект TAdoConnection, чтобы избежать установки строки подключения для каждого компонента. Держите объект подключения закрытым и открывайте его, когда вам нужен доступ к данным. Примерно так:

procedure OnTimer;
begin
  MyAdoConnection.Open;
  try
    // Data access code here
    ...
  finally
     MyAdoConnection.Close;
  end; 
end;

Вы можете дополнительно поместить try/except блок вокруг MyAdoConnection.Open, чтобы поймать ситуацию, когда сеть недоступна.

Что касается второй части вашего вопроса, лучше всего было бы поместить все ваши компоненты доступа к данным в модуль данных, который вы создадите, когда вам нужно будет выполнить процедуры доступа к данным. Затем вы можете поместить весь свой код доступа к данным в этот модуль данных и отделить его от остальной части кода.

Вы можете попытаться открыть соединение в событии OnCreate модуля данных, но будьте осторожны при обработке возможных исключений при открытии соединения. Закрыть соединение в событии OnDestroy. Затем вы можете использовать этот модуль данных следующим образом:

procedure OnTimer;
var myDataModule : TMyDataModule;
begin
  myDataModule  := TMyDataModule.Create;
  try
    // Data access code here
    myDataModule.DoSomeDatabaseWork;
  finally
     myDataModule.Free;
  end; 
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...