Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение подключения в файл. уменьшить время подключения 
V
    Опции темы
Avers
Дата 8.9.2010, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Использую TADOConnection для подключения к MS SQL 2005.
Необходимо: уменьшить время самого подключения (т.е. время от момента запуска программы до момента, когда Connected = True и можно выполнять запрос). По опыту знаю, что время подключения к сетевому серверу иногда занимает "некоторое время" (порой до нескольких секунд). 
я сам вижу решение в сохранении в файл готового соединения и соответственно чтении из него при создании программы. Видел где-то изходник, как это сделать, но не помню :(. 
Подскажите, если выбрал неверное решение основной проблемы и как сохранить сединение в файл.

*тему поместил в этот раздел из-за вопроса о сохранении компонента в файл
--------------------
Born to be wild
PM MAIL   Вверх
Delphist
  Дата 8.9.2010, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Avers @  8.9.2010,  09:45 Найти цитируемый пост)
Подскажите, если выбрал неверное решение основной проблемы и как сохранить сединение в файл.

Что значит сохранить соединение в файл.  smile 
Соединение - это же сессия


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Avers
Дата 8.9.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Имеется ввиду ADOConnection со всеми параметрами (имя сервера, имя БД и т.п.) целиком хранить в файле. 
Т.е. грубо говоря:
Код

ADOConnection.SaveToFile(FileName);
ADOCOnnection.LoadFromFile(FIleName);


Поясню, чего я хочу добиться. 
По собственному опыту знаю, что если (например, во время тестирования программы) в проекте настроено соединение и открыто, то после компиляции соединение с сервером у такой программы происходит почти мгновенно. Если же (уже во время эксплуатации) при запуске программы появляется окно авторизации, где указываются параметры соединения, то такая коннекция "включается" медленней.
Задача: сохранить настроенную коннекцию в файл, чтобы при следующем запусвке программы оставалось лишь открыть ее. 
Код

ADOConnection.Open;


Это сообщение отредактировал(а) Avers - 8.9.2010, 19:40
--------------------
Born to be wild
PM MAIL   Вверх
Keeper89
Дата 8.9.2010, 20:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(Avers @  8.9.2010,  19:34 Найти цитируемый пост)
в проекте настроено соединение и открыто, то после компиляции соединение с сервером у такой программы происходит почти мгновенно

Потому что Вы уже подключены.

По сабжу: даже теоретически, если Вы запишите компонент в файл (с установленным Connected в True), а соединения нет - его придется устанавливать и затрачивать время.

Это сообщение отредактировал(а) Keeper89 - 8.9.2010, 20:27


--------------------
PM MAIL WWW   Вверх
Delphist
Дата 8.9.2010, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Keeper89 @  8.9.2010,  21:26 Найти цитируемый пост)
теоретически, если Вы запишите компонент в файл (с установленным Connected в True), а соединения нет - его придется устанавливать и затрачивать время.

угу, согласен с Keeper89


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
aleksh
Дата 9.9.2010, 10:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 2
Всего: 13



toAvers: в файле сохраняется не соединение, а его параметры, ускорять подключение нужно другими путями
PM MAIL   Вверх
Avers
Дата 9.9.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Цитата(Keeper89 @  8.9.2010,  20:26 Найти цитируемый пост)
По сабжу: даже теоретически, если Вы запишите компонент в файл (с установленным Connected в True), а соединения нет - его придется устанавливать и затрачивать время.

А если соединение есть?
Или я что-то не так понял?


Цитата(aleksh @  9.9.2010,  10:02 Найти цитируемый пост)
toAvers: в файле сохраняется не соединение, а его параметры, ускорять подключение нужно другими путями 

А можете подсказать, в каком направлении работать?

Работа, желательно, должна происходить следующим образом: приложение один раз запускается с нужными параметрами подключения к серверу, а далее много раз запускается (запуски кратковременны) с параметрами для выполнения некоторой команды.
Т.е. параметры подключения нужно присвоить всего однажды (может быть, когда-нибудь они изменятся, но это будет очень редко). 
--------------------
Born to be wild
PM MAIL   Вверх
aleksh
Дата 9.9.2010, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 2
Всего: 13



toAvers: после выполнения запроса не обрывать подключение. это все, что можно сказать исходя из той информации, которую дал

направления - посмотреть, что загружается при подключении, может что-то можно исключить, улучшить соединение (аппаратные и сетевые настройки) от клиента к серверу, может подключение порой тормозит из-за перегруженности сервера
PM MAIL   Вверх
Poseidon
Дата 10.9.2010, 11:04 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 3
Всего: 133



Avers, вот расскажи, а сервер откуда будет знать что у клиента что-то там уже сохранено? Откуда серверу знать только по одному запросу "пусти" что у клиента все с собой, в кармане, и вообще "он тут уже был и ему теперь всегда можно"? В любом случае серверу потребуется попросить паспорт (запросить идентификацию), сверить фото с физиономией (сверить идентификационные данные с правами доступа), принять решение, пропустить/отказать, дождаться ответа от клиента о том, что он еще не передумал. Одного "пусти, я прошлый раз тут был и все сохранил с собой" не хватит. А вдруг что-то поменялось? Вдруг вчера было можно, а сегодня уже передумали? Ты просто не совсем понимаешь разницу между понятиями "настройки соединения" и "установленное соединение". 

Это как разговор по телефону. Ты не сможешь поговорить пока твой собеседник не согласится на разговор и не поднимет трубку. Если он уже однажды поднимал, то это не говорит о том, что ты можешь сохранить соединение, и в следующий раз в любое время вернуться к разговору мгновенно. Все-равно нужно будет сделать звонок, получить согласие собеседника на разговор и установить соединение. Так что все-равно придется ждать.

Другое дело, если сделать коннект сразу при запуске программы. Да еще в отдельном потоке. Пока пользователь будет тыкаться по менюшкам, программа сама соединится и все загрузит. Юзер ничего и не поймет. Ну или сделать сплеш-заставку (как это делает, к примеру, 1C).


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Avers
Дата 10.9.2010, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Цитата(Poseidon @  10.9.2010,  11:04 Найти цитируемый пост)
Ты просто не совсем понимаешь разницу между понятиями "настройки соединения" и "установленное соединение". 

Разницу знаю. Просто готов был уступить (не сохранять/читать компонент вместе с Connected=True, а сохранять хотя бы настройки, т.е. незначительная, но все же оптимизация).


Цитата(Keeper89 @  8.9.2010,  20:26 Найти цитируемый пост)
По сабжу: даже теоретически, если Вы запишите компонент в файл (с установленным Connected в True), а соединения нет - его придется устанавливать и затрачивать время.

Спасибо, вы меня поняли, подсказали направление) помогло) Удалось сохранить) 

Программа запускается много раз, кратковременно (для выполнения команд SQL на сервере). Поэтому "пусти, я прошлый раз тут был и все сохранил с собой" - говорит о том, что с вероятностью ~1 все пройдет успешно, если я открою соединение снова. 


Цитата(Avers @  8.9.2010,  08:45 Найти цитируемый пост)
я сам вижу решение в сохранении в файл готового соединения и соответственно чтении из него при создании программы. Видел где-то изходник, как это сделать, но не помню :(. 

Получилось
Код

procedure TDataMain.DataModuleCreate(Sender: TObject);
var
  Cnt: TFileStream;
begin
  if not FileExists('Connection.cmp') then
    Exit;
  try
    Cnt := TFileStream.Create('Connection.cmp',fmOpenRead);
  finally
    Cnt.ReadComponent(Connection);
    // если сохранить открытое соединение, то и читается открытым (=скомпилить с открытым соединением)
    if not Connection.Connected then
      Connection.Open;
  end;
  Cnt.Free;
end;

Сохраняется аналогично

Это сообщение отредактировал(а) Avers - 10.9.2010, 14:34
--------------------
Born to be wild
PM MAIL   Вверх
aleksh
Дата 10.9.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 2
Всего: 13



как интересно, а можно подробней?
какое подключение, как выполняются запросы, что именно сохраняется?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.