Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Количество соединений и запросы


Автор: Fitc 9.2.2010, 19:25
Здравствуйте.
Вопрос такой: в чем отличие ADOConnection.Execute, ADOQuery.ExecSQL,ADOCommand.Execute. И какие еще есть подобные процедуры? 
А также если использовать многократно такие команды, то по идее должны создаваться многократные соединения, тогда хватит ли, например такого кода, что бы сохранять всегда одно соединение?

Цитата

with ADOQuery1 do
   begin
    // закрываем
    Close;
    // присваиваем Connection
    Connection :=ADOConnection1;
    SQL.Text := .........;
    // открываем датасет
    ExecSQL;
    // переводим Connection в Nil
    Connection := Nil;
   end;


То есть открыли соединение, отправили запрос, закрыли соединение.
 smile 

Автор: ~FoX~ 10.2.2010, 21:25
Цитата(Fitc @  9.2.2010,  20:25 Найти цитируемый пост)
ADOConnection.Execute, ADOQuery.ExecSQL,ADOCommand.Execute.

ADOConnection - Выполняет подключение
ADOQuery - Выполняет SQL запрос, возвращает DataSet/RecordSet
ADOCommand - Выполняет команду, не возвращает результат в виде DataSet/RecordSet

Добавлено @ 21:26
Цитата(Fitc @  9.2.2010,  20:25 Найти цитируемый пост)
with ADOQuery1 do
   begin
    // закрываем
    Close;
    // присваиваем Connection
    Connection :=ADOConnection1;
    SQL.Text := .........;
    // открываем датасет
    ExecSQL;
    // переводим Connection в Nil
    Connection := Nil;
    Close; // <- Не забываем закрывать
   end;


Автор: Fitc 11.2.2010, 18:46
Цитата(~FoX~ @  10.2.2010,  21:25 Найти цитируемый пост)
 Close; // <- Не забываем закрывать

А что при ExecSQL ADOQuery вдруг становится open?
для чего это надо?

Автор: Данкинг 11.2.2010, 19:48
Цитата(Fitc @  11.2.2010,  18:46 Найти цитируемый пост)
А что при ExecSQL ADOQuery вдруг становится open?

Видимо, тут имеется в виду закрытие ADOQuery "на всякий случай" (если вдруг он открыт) перед какими-либо действиями с ним.

Автор: Fitc 13.2.2010, 18:11
Цитата(Данкинг @  11.2.2010,  19:48 Найти цитируемый пост)
Видимо, тут имеется в виду закрытие ADOQuery "на всякий случай" (если вдруг он открыт) перед какими-либо действиями с ним. 

Посмотри повнимательнее, там в самом начале закрывается ADOQuery
Цитата

with ADOQuery1 do
   begin
    // закрываем
    Close;
    // присваиваем Connection
    Connection :=ADOConnection1;
    SQL.Text := .........;
    // открываем датасет
    ExecSQL;
    // переводим Connection в Nil
    Connection := Nil;
    Close; // <- Не забываем закрывать
   end;

По теме отвечаем, ребята)
Вобщем то сам догадываюсь, что этого кода достаточно для поддержания одиночных сеансов соединения...
Вопрос был чисто для собственной уверенности...

Автор: ~FoX~ 14.2.2010, 04:52
Цитата(Fitc @  11.2.2010,  19:46 Найти цитируемый пост)
А что при ExecSQL ADOQuery вдруг становится open?

Цитата(Fitc @  13.2.2010,  19:11 Найти цитируемый пост)
Посмотри повнимательнее, там в самом начале закрывается ADOQuery

Цитата(Fitc @  13.2.2010,  19:11 Найти цитируемый пост)
    SQL.Text := .........;
// открываем датасет

Не известно что подразумевается под словами "открываем датасет".... Да и выполнение запросов с закрытым коннектом, это ИМХО моветон....

Добавлено @ 04:57
Цитата(Fitc @  13.2.2010,  19:11 Найти цитируемый пост)
Вобщем то сам догадываюсь, что этого кода достаточно для поддержания одиночных сеансов соединения...

Этого достаточно при условии, что ты не вносишь изменений в данные и/или не добавляешь/удаляешь их.... Ибо ExecSQL возвращает только количество строк и не возвращает курсор... Следовательно ни о каких дествиях над данными не может быть речи

Автор: Fitc 14.2.2010, 23:14
Цитата(~FoX~ @  14.2.2010,  04:52 Найти цитируемый пост)
Не известно что подразумевается под словами "открываем датасет"....

Код выдран из одной статьи вместе с комментариями, что автор имел ввиду я не знаю, оставил как было... Если надо могу дать источник
Цитата(~FoX~ @  14.2.2010,  04:52 Найти цитируемый пост)
Да и выполнение запросов с закрытым коннектом, это ИМХО моветон....

почему, по вашему,  коннет закрыт, если по умолчанию свойство ADOConnection1.Connected стоит в true?
Цитата(~FoX~ @  14.2.2010,  04:52 Найти цитируемый пост)
Этого достаточно при условии, что ты не вносишь изменений в данные и/или не добавляешь/удаляешь их.... Ибо ExecSQL возвращает только количество строк и не возвращает курсор... Следовательно ни о каких дествиях над данными не может быть речи

Насколько я знаю ExecSQL не возвращает данные клиенту, удаление/редактирование/добавление записей осуществиться на сервере, так почему же действий с данными, по вашему, не произойдет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)