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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2015, 10:41   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
Смущение SQL запрос не срабатывает

Суть проста.. Хочу редактировать запись в базе....
Вот код:
Код:
     {
      qry1.Edit;

      qry1.FieldByName('client_opisanie').AsString := edt1.Text;
      qry1.FieldByName('client_date').AsDateTime := int(dtp1.Date) + frac(dtp2.Time);
      qry1.FieldByName('client_check').AsBoolean := chk1.Checked;
      qry1.FieldByName('client_history').AsString := mmo1.Text;

      qry1.Post;
     }
    qry2.SQL.Clear;
    qry2.SQL.Add('Update Client SET client_opisanie = ' + QuotedStr(edt1.Text) +
                              ' and client_date = ' + DateToStr(dtp1.Date) + TimeToStr(dtp2.Time)+
                              ' and client_check = ' + QuotedStr(edt1.Text)+
                              ' and client_history = ' + QuotedStr(edt1.Text)+
                 ' WHERE id_client LIKE ' + QuotedStr(edt2.Text));
    ShowMessage(qry2.SQL.Text);
    qry2.ExecSQL;
В первом случае, который закоментирован, ошибки никакой нету, но изменяется только первая запись... т.е. не важно какую запись я выбрал, редактируется только самая первая...
А во втором случае, выдаётся ошибка: "Неправильно определён объект Parameter. Предоставлены несогласованные или неполные сведения", у меня ощущение что он имеет в виду, вот эту строку:
Код:
' and client_date = ' + DateToStr(dtp1.Date) + TimeToStr(dtp2.Time)
но я не уверен....
В общем, если не сложно, подскажите как исправить ошибку ...
Janger вне форума Ответить с цитированием
Старый 24.01.2015, 10:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В первом случае, который закоментирован, ошибки никакой нету, но изменяется только первая запись...
Все верно. Если не первая то та, на которой стоит курсор таблицы. Чтоб такой способ сработал его нужно крутить в цикле.
Цитата:
' WHERE id_client LIKE ' + QuotedStr(edt2.Text));
Ты знаешь как работает оператор LIKE?
Разницу между ним и = понимаешь? В данном случае LIKE сработает именно как равно.
Цитата:
А во втором случае, выдаётся ошибка
Которая говорит что дату-время так просто передавать нельзя. Либо заключи их в ковычки с помошью QuotedStr() либо действительно используй параметризированный запрос.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.01.2015, 11:01   #3
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Все верно. Если не первая то та, на которой стоит курсор таблицы. Чтоб такой способ сработал его нужно крутить в цикле.

Ты знаешь как работает оператор LIKE?
Разницу между ним и = понимаешь? В данном случае LIKE сработает именно как равно.

Которая говорит что дату-время так просто передавать нельзя. Либо заключи их в ковычки с помошью QuotedStr() либо действительно используй параметризированный запрос.
Насчёт = и Like, по моему, = используют когда со строками работают, а Like в случае работы с числами, вроде бы мне так объясняли
Насчёт второго ... У меня никак не выходит сделать всё с помощью QuotedStr() ... Думаю доделать первый способ, там как никак почти всё сделано, только надо курсор как то смещать с первого места
Janger вне форума Ответить с цитированием
Старый 24.01.2015, 11:13   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
вроде бы мне так объясняли
или вроде так думаешь. LIKE только для сравнения символьных строк по шаблону.
Цитата:
Думаю доделать первый способ
и зря. Второй способ гораздо эффективней, только стоит использовать параметризацию, особенно для даты-времени, да и для остального не помешает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.01.2015, 11:50   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
    qry2.SQL.Clear;
    qry2.SQL.Add('Update Client SET client_opisanie = :co'+
                              ' and client_date = :cd '+
                              ' and client_check = :cc '+
                              ' and client_history = :ch '+
                 ' WHERE id_client = :id';
    with qry.Parameters do begin
      ParamByName('id').Value:=edt2.Text;
      ParamByName('co').Value:=edt1.Text;
      ParamByName('cd').Value:=dtp1.Date+dtp2.Time;
      ParamByName('cc').Value:=edt1.Text;
      ParamByName('ch').Value:=edt1.Text;
    end;
    qry2.ExecSQL;
И все.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.01.2015, 12:53   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

еще лишние end-ы раскулачить бы
Код:
    qry2.SQL.Add('Update Client SET client_opisanie = :co'+
                              ', client_date = :cd '+
                              ', client_check = :cc '+
                              ', client_history = :ch '+
                 ' WHERE id_client = :id';
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.01.2015, 17:28   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да. Не обратил внимания.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос dzuga Помощь студентам 13 05.06.2014 20:09
SQL запрос xew БД в Delphi 1 07.04.2012 03:19
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15