powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQL запрос с аустыми значениями даты и времени
16 сообщений из 16, страница 1 из 1
SQL запрос с аустыми значениями даты и времени
    #39579258
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер MySQL 5.5
Среда Delphi 7
Коннекторы Zlib



Выполняю запрос:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 Form1.ZQWork.SQL.Add('INSERT INTO registration');
  Form1.ZQWork.SQL.Add('(dateadd,timeadd,id,fio,phonepref,phone,number,'+
    'city,adress,home,apartment,dateclose,timeclose,'+
    'creator,status,executer,respons_exe,st1,st2,st3,st4,st5,'+
    'pstartdate,pstarttime,pstopdate,pstoptime,'+
    'content,'+
    'stage,pod,'+
    'description) VALUES (''' + trim(dateadd1) +  ''',''' + trim(timeadd1) +   ''',''' + trim(id.Text) +    ''',''' + trim(fio.Text) +    ''',''' + trim(phonepref.Text) +      ''',''' + trim(phone.Text) +     ''',''' + trim(number.Text) +
    ''',''' + trim(city.Text) +  ''',''' + trim(adress.Text) +    ''',''' + trim(home.Text) +  ''',''' + trim(apartment.Text) +   ''',''' + trim(dateclose1) +    ''',''' + trim(timeclose1) +
    ''',''' + trim(creator.Text)+  ''',''' + inttostr(status.ItemIndex)+   ''',''' + trim(executer.text)+ ''',''' + trim(respons_exe.text)+   ''',''' + booltostr(st1.Checked)+   ''',''' + booltostr(st2.Checked)+  ''',''' + booltostr(st3.Checked)+  ''',''' + booltostr(st4.Checked)+  ''',''' + booltostr(st5.Checked)+
    ''',''' + trim(pstartdate1)+  ''',''' + trim(pstarttime1)+   ''',''' + trim(pstopdate1)+ ''',''' + trim(pstoptime1)+
    ''',''' + trim(content.Text)+
    ''',''' + trim(etag.Caption)+ ''',''' + trim(num_pod.Caption) +
    ''',''' + trim(description.Text) +  ''')');



Еси все данные в (DATE\TIME) введены, то все отлично. Не дает закинуть пустые значения. Приходится городить вот такие костыли:
Код: pascal
1.
2.
3.
4.
 if  dateadd.Text='  .  .    ' then   dateadd1:='0000-00-00' else  DateTimeToString(dateadd1,'yyyy-mm-dd',strtodate(dateadd.Text))  ;
 if  dateclose.Text='  .  .    ' then   dateclose1:='0000-00-00' else   DateTimeToString(dateclose1,'yyyy-mm-dd',strtodate(dateclose.Text))  ;
 if  timeadd.Text='  :  ' then timeadd1:='00:00:00' else timeadd1:=timeadd.Text;
  if  timeclose.Text='  :  ' then timeclose1:='00:00:00' else timeclose1:=timeclose.Text;



При таком значении(и в любой другой переменной, которая соответствует столбцу в БД типа DATE\TIME)
Код: pascal
1.
 timeclose1:=''


вываливается эксепшен с ошибкой на пустое начение.
Поля в БД стоят не уникальные, пустые.

Как быть? неужели нельзя записать пустое значение в поле даты или времени?
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579302
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про параметры и триггеры before insert ТС, похоже, не слышал ни разу....
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579312
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666Как быть? неужели нельзя записать пустое значение в поле даты или времени?
Как всегда в таких случаях, есть два пути решения проблемы, один простой, другой правильный. Простой путь - разобраться, как записать пустое значение без дельфы, а уже вооружившись этим знанием - подумать, как сделать это в дельфе. Правильный - выкинуть всё, что Вы здесь написали и привели, и сделать адекватно, прочитав перед этим - как именно это следует делать.

P.S. Если увидите в книжке или в статье что-то подобное тому, что Вы написали - отправляйте в мусорную корзину.
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579321
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,

1. у тебя есть тип TimeStamp. Храни там дату и время, по мере необходимости будешь извлекать или то, или другое, или оба два - т.о. образом кол-во полей может уменьшиться на 25-30%
2. используй параметры, типа
Код: pascal
1.
2.
3.
4.
5.
Form1.ZQWork.SQL.Text:= 'INSERT INTO registration (dateadd,timeadd...)  VALUES (:dateadd,:timeadd ...)';
Form1.ZQWork.SQL.Prepare;
Form1.ZQWork.SQL.ParamByName('dateadd').Value:= nil;
Form1.ZQWork.SQL.ParamByName('timeadd').Value:= nil;
Form1.ZQWork.SQL.Active:= True;



ps. я бы был поосторожнее с названиями полей типа dateadd , ибо это вполне может оказаться какой-нибудь функцией в твоей БД

pss. ты это за деньги делаешь или учебное задание? Если первое - твоему работодателю не позавидуешь
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579376
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокВалерий666,

1. у тебя есть тип TimeStamp. Храни там дату и время, по мере необходимости будешь извлекать или то, или другое, или оба два - т.о. образом кол-во полей может уменьшиться на 25-30%
2. используй параметры, типа
Код: pascal
1.
2.
3.
4.
5.
Form1.ZQWork.SQL.Text:= 'INSERT INTO registration (dateadd,timeadd...)  VALUES (:dateadd,:timeadd ...)';
Form1.ZQWork.SQL.Prepare;
Form1.ZQWork.SQL.ParamByName('dateadd').Value:= nil;
Form1.ZQWork.SQL.ParamByName('timeadd').Value:= nil;
Form1.ZQWork.SQL.Active:= True;



ps. я бы был поосторожнее с названиями полей типа dateadd , ибо это вполне может оказаться какой-нибудь функцией в твоей БД

pss. ты это за деньги делаешь или учебное задание? Если первое - твоему работодателю не позавидуешь

Да, надо сделать по человечески через параметры.
За это никто не платит. Попросили максимально быстро набыдлокодить работающую версию.
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579388
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 Form1.ZQWork.Active:=false;
  Form1.ZQWork.SQL.Clear;
    Form1.ZQWork.SQL.Add('INSERT INTO registration (dateadd,timeadd)'+
    'VALUES'+
    '(:dateadd,:timeadd)');

Form1.ZQWork.Prepare;
Form1.ZQWork.ParamByName('dateadd').Value:= nil;
Form1.ZQWork.ParamByName('timeadd').Value:= nil;

    try
    Form1.ZQWork.Active:= True;
  except on e: EDatabaseError do
      messageDlg(e.message, mtError, [mbOK], 0);
  end;


Ругается тут: Form1.ZQWork. Prepare;
и тут
.....Value:= nil;
В uses подключен Variants
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579402
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Валерий666Ругается тут: Form1.ZQWork. Prepare;
А как ругается?

Валерий666и тут
.....Value:= nil;
Form1.ZQWork.ParamByName('dateadd').Value:= null ;

Но лучше
Form1.ZQWork.ParamByName('dateadd'). Clear ;

С уважением, Polesov.
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579407
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПривет.

Валерий666Ругается тут: Form1.ZQWork. Prepare;
А как ругается?

Валерий666и тут
.....Value:= nil;
Form1.ZQWork.ParamByName('dateadd').Value:= null ;

Но лучше
Form1.ZQWork.ParamByName('dateadd'). Clear ;

С уважением, Polesov.

Как-то так. Эмпирическим путем выявлено, что ему что-то не нравится в параметрах. Т.к. на саму подготовку в рабочем запросе эксепшена нет...
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579409
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,
Разобрался. Неведомо почему но IDE выславляло не верную точку.
Ругалось в итоге на вот это
Код: pascal
1.
Form1.ZQWork.Active:= True;
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579414
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666Ругалось в итоге на вот это

И правильно делало, поскольку запрос insert не может быть активным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579435
VDSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

В ряде случаев (и скорее всего в случае ТС, раз у него в конце концов это заработало) эффект от него такой же, как и от ExecSQL, хотя конечно же это не профессионально. ))
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579444
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666Валерий666,
Разобрался. Неведомо почему но IDE выславляло не верную точку.

Такое бывает если в исходнике с переводами строки косяк, например где-то вместо CrLf просто Lf.
Это может получиться при вставке текста из интернета, например.
Надо открыть файл в редакторе, который умеет управлять типом Line Endings, принудительно выставить нормальные и пересохранить.
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579445
VDSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

При (ручном) форматировании даты, очевидно, же, что неверно выставляло. ))
А что у меня прямое? - сказал верблюд. (с) )))
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579450
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT INTO registration (dateadd,timeadd...) VALUES (NULL,NULL ...)
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579483
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для сервера Firebird передача в параметр NULL делается так:

Код: pascal
1.
QIns.ParamByName('param_name').Clear;



Возможно с вашей либой и сервером это так же будет работать.
...
Рейтинг: 0 / 0
SQL запрос с аустыми значениями даты и времени
    #39579525
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИ правильно делало, поскольку запрос insert не может быть активным.
Верно. Exec.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQL запрос с аустыми значениями даты и времени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]