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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2014, 13:42   #1
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию Access + поле дата/время

У меня есть форма для заполнения там едиты, мемо, маскедит... когда пользователь заполняет поля он может пару полей оставить пустыми а когда я пытаюсь через запрос передать пустой параметр полю дата то матюки, не знаете как обойти это?
код запроса
Код:
 with F_main.qry1 do
    begin
      Active:=False;
      SQL.Clear;                                                                                                                                                                                           // , status5=:pstatus5
      SQL.Add('INSERT into Dok (dov_number, Dov_date, Date_oplatu, Kontragent, Summ_money, Rah_number, Rah_Date, Akt_number, Akt_date, Naklad_number, Naklad_date, Dog_buh, Dog_der)');
      SQL.Add('values (:par1,:par2,:par3,:par4,:par5,:par6,:par7,:par8,:par9,:par10,:par11,:par12,:par13)' );
      Parameters.ParamByName('par1').Value:= edt1.Text;
      Parameters.ParamByName('par2').Value:= FormatDateTime('ddddd',StrToDate(medt1.Text));
      Parameters.ParamByName('par3').Value:= medt2.Text;
      Parameters.ParamByName('par4').Value:= cbb1.Items[cbb1.ItemIndex];
      Parameters.ParamByName('par5').Value:= edt2.Text;
      Parameters.ParamByName('par6').Value:= edt4.Text;
      Parameters.ParamByName('par7').Value:= medt3.Text;
      Parameters.ParamByName('par8').Value:= edt5.Text;
      Parameters.ParamByName('par9').Value:= medt4.Text;
      Parameters.ParamByName('par10').Value:= edt6.Text;
      Parameters.ParamByName('par11').Value:= medt5.Text;
      Parameters.ParamByName('par12').Value:= edt7.Text;
      Parameters.ParamByName('par13').Value:= edt8.Text;

      ExecSQL;

    end;
Konstantin_ua вне форума Ответить с цитированием
Старый 24.01.2014, 13:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

для каждого параметра проверять, пустое или нет значение и, в зависимости от этого передавать или нет параметер!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2014, 14:00   #3
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
для каждого параметра проверять, пустое или нет значение и, в зависимости от этого передавать или нет параметер!
ну это тогда нужно каждый параметр отдельно передавать? я же передаю все сразу, или можно параметру null присвоить и тогда он не бует передаваться?
Konstantin_ua вне форума Ответить с цитированием
Старый 24.01.2014, 14:23   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, (для начала) попробуйте вместо тех параметров, которые могут отстутсвовать передать Null
(например, так;
Код:
....
Parameters.ParamByName('par11').Value:= varNull;
....
во-вторых, если это не прокатит, тогда Вам придётся строчку Insert формировать ДИНАМИЧЕСКИ (т.е. в run-time).

в-третьих, в поля, которые в БД имеют тип дата/время должны передавать значения в формате даты/времени! (TDateTime)
использовать для этого строки - путь к трудновылавливаемым глюкам-багам!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2014, 14:57   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
тогда Вам придётся строчку Insert формировать ДИНАМИЧЕСКИ (т.е. в run-time).
это плохой путь, можно нулл значит нулл, нельзя а по другому никак- значит дефаулт и т.д.

Последний раз редактировалось eval; 24.01.2014 в 14:59.
eval вне форума Ответить с цитированием
Старый 24.01.2014, 16:26   #6
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Код:
 if(medt1.Text='  .  .  ')then Parameters.ParamByName('par2').Value:=Null else
      Parameters.ParamByName('par2').Value:= FormatDateTime('ddddd',StrToDate(medt1.Text));
работает если кому надо
Konstantin_ua вне форума Ответить с цитированием
Старый 24.01.2014, 20:43   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

т.е. Вы проигнорировали мои слова насчёт передачи параметров типа "дата/время"...
ну-ну..
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поле "Дата" в форме для добавления новых записей в основную таблицу (Access) Zercon Помощь студентам 1 13.01.2013 14:41
Дата и время Spaun Помощь студентам 1 14.06.2010 13:01
Как посчитать в базе данных Access дата/время? Юрий_Комышанский Microsoft Office Access 4 01.05.2010 10:56
Дата/время Agapov_stas Помощь студентам 6 24.11.2009 14:51
время и дата crit БД в Delphi 16 03.06.2009 21:11