Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.07.2011, 19:09
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Вопрос Date = Null - КАК ???

Я охреневаю над этой проблемой, что Дата не может быть пуста в Delphi... это ужас какой-то, что делать хз...
Вот есть таблица в БД, есть там данные, вот с данными происходит некоторое событие - устанавливаем в соответствующее поле результат событий, а в соседнее поле - дату событий. Потом вдруг понадобилось очистить предыдущее действие - поле результата событий очищается без проблем, но как очистить дату?! ведь передать Date=null через Delphi никак не получается!
PS Чтобы не было воплей "дата не может быть null" - откройте БД, посмотрите сами - там чётко поле пустое или в спецрадкторах типа IBExpert написано NULL!

Так как же очистить дату в БД (передать из Delphi в Firebird пустое значение даты, которое сможет затереть предыдущее значение даты) ?!
Ответить с цитированием
  #2  
Старый 29.07.2011, 19:31
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

я же уже писал как это сделать:
Код:
Table1.FieldByName('date1').Clear; // очищаем значение поля
вот тут:
http://www.delphisources.ru/forum/sh...58&postcount=7
а вот что в справке написано:
Цитата:
Clear method (TField)

Sets the value of the field to NULL.

Delphi syntax:

procedure Clear;

C++ syntax:

virtual void __fastcall Clear(void);

Description

Call the Clear method to give the field a blank value (a NULL value in SQL terms).
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 29.07.2011, 19:35
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Да, Clear для полей. Или иногда (привет стандарты) ValueClear. В том примере Вы писали про обработку существующей даты. А тут задача в другом - нужно передать из программы в БД ПУСТОЕ значение даты, чтобы в БД затереть предыдущее значение даты и сделать поле БД пустым!

Но это не поля, а атрибут(переменная) процедуры. Вызываю процедуру из другого юнита и передаю значение всех требуемых атрибутов - если значение атрибута DataSobitiya не указана или указана как null - Delphi выдаёт ошибку.
Пробовал указывать для процедуры в месте объявления значение по-умочланию =null также, работает только с =0, но это увы уже даёт дату 1899года, мля.
Ответить с цитированием
  #4  
Старый 29.07.2011, 19:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

и на этот вопрос в той теме был ответ:
Цитата:
Сообщение от NumLock
естествено можно Variant использовать.
Код:
procedure CounterStrike(date1: Variant);
begin
  if not VarIsNull(date1) then ShowMessage(DateToStr(date1))
  else ShowMessage('Null');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CounterStrike(Now);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  CounterStrike(Null);
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 29.07.2011, 19:48
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Пропустил мб. Нифига се, то есть variant может быть и датой и нулл работает и дату передаёт правильно?! а для даты нулл уже не работает?! Опять - Привет стандарты!
Ответить с цитированием
  #6  
Старый 29.07.2011, 20:52
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Говорят Variant работает в разы медленнее чем точно определённые классы типа Date/Integer... неужели настолько медленно?!

Последний тупой вопрос на сегодня - при передачи из Delphi через Dataset в БД значения Variant:=null передаются как "null" или не передаются вообще? БД воспринимает их как "нужно записать null" или как "ничего не передали, значит это поле перезаписывать не будем".

PS Если все эти действия приводят к записи в БД значения null, тогда вопрос - как при вызове процедуры указать один из атрибутов пустым, чтобы в БД данное поле НЕ было перезаписано?! Конструкция типа procedure Dannie(1,2,,,5) вызывает в Delphi ошибку... Delphi очень хочет, чтобы каждый параметр был указан и написан!

Последний раз редактировалось delphicoding, 29.07.2011 в 21:04.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025