Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 19:28   #1
Arishk@
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 47
Вопрос Разница между параметром и обычной переменной

Объясните пожалуйста в чем разница между использованием запроса с обычной переменной delphi, которая подставляется в текст запроса и параметром. Многие говорят что лучше параметры а я никак не могу понять разницы?
Arishk@ вне форума Ответить с цитированием
Старый 12.05.2012, 19:34   #2
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Параметры правильно остальное нет, вот вам и разница.
=master= вне форума Ответить с цитированием
Старый 12.05.2012, 19:40   #3
Arishk@
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от =master= Посмотреть сообщение
Параметры правильно остальное нет, вот вам и разница.
Спасибо конечно за ответ. Но все равно непонятно... Может была какая-нибудь ситуация когда Вы поняли что лучше использовать параметры?
Arishk@ вне форума Ответить с цитированием
Старый 12.05.2012, 20:34   #4
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Она не была, она есть всегда.
Когда вы составляете запрос руками то надо учитывать ньюансы того что сервер базы может находится в другой локали и т.д.параметры же берут на себя и эти проблемы разруливают.
=master= вне форума Ответить с цитированием
Старый 13.05.2012, 11:22   #5
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

=master=
а при чем тут локалка???
Arishk@
Представим ситуацию что вам в цикле надо перебрать данные и выполнить кучу запросов.
если переписывать запрос в цикле это будет на много дольше, чем если вынести тело за цикл и подставлять в текст запроса только параметры.

Пример
Код:
 
QError.SQL.Text:='delete from USL where SLUCH_UUID=:UUID  ';
while not QTestMain.Eof do
  begin
   QError.ParamByName('UUID').AsString:=QTestMain.Fields[0].AsString;
   QError.ExecQuery;
 end;
это будет в разы быстрее чем
Код:
*
while not QTestMain.Eof do
  begin
QError.SQL.Text:='delete from USL where SLUCH_UUID='+QTestMain.Fields[0].AsString+'';   
   QError.ExecQuery;
 end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 13.05.2012, 11:58   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

BARNEY, в основном именно то, что =master= имеет ввиду, т.е. умолчательный символьный формат даты-времени, чисел с десятичной точкой для СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.05.2012 в 12:20.
Аватар вне форума Ответить с цитированием
Старый 13.05.2012, 12:18   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а при чем тут локалка???
локалка при том, что десятичные разделители, формат даты и времени на локальной машине (где переменные тупо подставляются в запрос) и на сервере БД, где этот запрос будет отрабатываться могут быть РАЗНЫМИ (особенно эта проблема часто встречается именно с датами!). В случае использования параметров передаются именно значения с указанием их типа, сервер БД не пытается домыслить и, например, понять, какую же дату имел в виду клиент, когда писал DateIn = '11-05-2012' - то ли 5 ноября, то ли 11 мая...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2012, 16:24   #8
Arishk@
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 47
По умолчанию

Спасибо огромное всем за ответ. Буду переделывать тогда все под параметры. Если вопросы возникнут у Вас спрошу, а то в первый раз с ними работаю.
Arishk@ вне форума Ответить с цитированием
Старый 13.05.2012, 17:14   #9
Arishk@
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 47
По умолчанию

а если я захочу еще раз использовать параметр с тем же значением, мне нужно будет перед ExecSQL заново присваивать это же значение параметру или этого не понадобиться?
Еще вопрос возник. Как тогда записывать дату в параметр? Раньше я еще форматировала и она у меня становилась как строка

Код:
data_vremya:=FormatDateTime('yyyymmdd hh:nn:ss', now);
нужно ли ее сейчас форматировать?

Последний раз редактировалось Arishk@; 13.05.2012 в 17:47.
Arishk@ вне форума Ответить с цитированием
Старый 14.05.2012, 06:01   #10
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

off
Serge_Bliznykov, спасибо за разъяснения. всю жизнь использовал маскэдит для даты... по этому не было такой проблемы никогда.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск вшеншнего приложения с параметром от переменной INT Leximus Общие вопросы Delphi 3 02.10.2010 15:37
Разница между временем asd48 Microsoft Office Excel 1 05.06.2009 23:44
Разница между датами kykysya Общие вопросы Delphi 8 26.03.2009 18:22
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21