powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проверка даты в записи
13 сообщений из 13, страница 1 из 1
Проверка даты в записи
    #40027264
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного запутался с типом TDateTime.

Есть код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 TRec = record
    Date1: TDateTime;
...
var Rec: TRec; 
   
if not Query.FieldByName('date1').isNull then
  Rec.Date1 := Query.FieldByName('date1').asDateTime;
  
  if Rec.Date1 = 0 then
   ShowMessage('Даты нет в записи.');



Не могу понять как проверить существование даты в записи.
Правильно ли - if Rec.Date1 = 0 ?
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027268
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnet,

считай, что её там нет до тех пор, пока ты её САМ не поместишь туда.
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027270
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
wsnet,

считай, что её там нет до тех пор, пока ты её САМ не поместишь туда.


Немного поподробнее можно, как проверка будет выглядеть?
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027278
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
TRec = record
    Date1: Variant;
end;
var Rec: TRec; 

Rec.Date1 := Query['date1'];

if VarIsNull(Rec.Date1) then
   ShowMessage('Даты нет в записи.');
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027279
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, а если все же
Код: pascal
1.
2.
 TRec = record
    Date1: TDateTime;  

???
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027287
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRec = record
    Date1: TDateTime;
end;
var Rec: TRec; 
     V: Variant;

V := Query['date1'];

if VarIsNull(V) then
   ShowMessage('Даты нет в записи.')
else Rec.Date1 := V;
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027297
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, спасибо, а если я захочу посмотреть содержимое записи в другой процедуре и получить только ненулевую дату у записи ?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 TRec = record
    Date1: TDateTime;
    Name: String;

var Rec: TRec; 
Rec.Name := ‘A’;
if not Query.FieldByName('date1').isNull then
  Rec.Date1 := Query.FieldByName('date1').asDateTime;
 .....
//процедура 
If Rec.Date1 не нулевая тогда делай то то ...
  


Если у записи не установлена дата, как это проверить?
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027303
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
Немного запутался с типом TDateTime.

Есть код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 TRec = record
    Date1: TDateTime;
...
var Rec: TRec; 
   
if not Query.FieldByName('date1').isNull then
  Rec.Date1 := Query.FieldByName('date1').asDateTime;
  
  if Rec.Date1 = 0 then
   ShowMessage('Даты нет в записи.');



Не могу понять как проверить существование даты в записи.
Правильно ли - if Rec.Date1 = 0 ?


AsDateTime для null возвращает 0. Используйте данную особенность!
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027316
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
Если у записи не установлена дата, как это проверить?

Сделать в записи дополнительно поле, в которое записывать ФАКТ записи данных (любых, в том числе и Null)
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027319
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, если в приведённом ниже примере запрос вернёт null для date1, что я получу в поле записи

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  

TRec = record
    Date1: TDateTime;

// запрос вернул в date1 null 

Rec.Date1 := Query.FieldByName('date1').asDateTime;



Delphi вернёт в Rec.date1 = 0 ?
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027366
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

wsnet


Есть код:

Код: pascal
1.
2.
3.
 TRec = record
    Date1: TDateTime;
...


Не могу понять как проверить существование даты в записи.
Правильно ли - if Rec.Date1 = 0 ?


Тип TDateTime по сути является вещественным типом.
Для вещественных типов есть состояние NAN (-NAN).
В принципе, можно это использовать:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
const
  NAN = $7FFFFFFFFFFFFF;

procedure SetNan( var Value : TDateTime ); 
var
  Int : int64 absolute Value;
begin
  Int := NAN;
end;

function IsNan( Value : TDateTime ) : boolean;
var
  Int : int64 absolute Value;
begin
  Result := Int = NAN;
end;



Тогда :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  if not Query.FieldByName('date1').isNull then
    Rec.Date1 := Query.FieldByName('date1').asDateTime
  else
    SetNan( Rec.Date1 );
  . . .

  if IsNan( Rec.Date1 ) then
   ShowMessage('Даты нет в записи.');



Но без проверки на NAN любая операция с помеченными значениями будет вызывать ошибку 'Invalid floating point operation'.
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027367
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
DimaBr, если в приведённом ниже примере запрос вернёт null для date1, что я получу в поле записи

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  

TRec = record
    Date1: TDateTime;

// запрос вернул в date1 null 

Rec.Date1 := Query.FieldByName('date1').asDateTime;



Delphi вернёт в Rec.date1 = 0 ?


А самому проверить?
...
Рейтинг: 0 / 0
Проверка даты в записи
    #40027368
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnet
DimaBr, если в приведённом ниже примере запрос вернёт null для date1, что я получу в поле записи

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  

TRec = record
    Date1: TDateTime;

// запрос вернул в date1 null 

Rec.Date1 := Query.FieldByName('date1').asDateTime;




Delphi вернёт в Rec.date1 = 0 ?

Зависит от датасете. Может исключение выбросить, может 0.0 (float) вернуть. Проверь.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проверка даты в записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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