Фильтр по пустому полю data

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
alanpa
незнакомец
Сообщения: 4
Зарегистрирован: 12.06.2011 17:42:01

Фильтр по пустому полю data

Сообщение alanpa »

Есть поле dataprint - дата открытия магазина - (ftdata).
Как создать фильтр по дате вообще - получается, например, так:

Код: Выделить всё

   dbnalog.Filter:='DTOS(dataprint)>"20110101"'
   dbnalog.Filtered:=true;


А как отфильтровать записи, у которых это поле пустое? (нужен список магазинов, у которых дата открытия не определена.

lazarus v0.9.31
win7, ubuntu
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Может

Код: Выделить всё

dbnalog.Filter:='DTOS(dataprint) is null '


Что за функция DTOS ? Какая база данных ? Разрешены ли null значения в поле ?
alanpa
незнакомец
Сообщения: 4
Зарегистрирован: 12.06.2011 17:42:01

Сообщение alanpa »

DTOS(data) преобразует дату в строку вида yyyymmdd
База dbf
null не запрещены
Так:

Код: Выделить всё

dbnalog.Filter:=('dataprint is null');   

и так

Код: Выделить всё

dbnalog.Filter:=(DTOS('dataprint) is null');   

не получилось.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

значит осталось
dbnalog.Filter:='DTOS(dataprint) = "" '

Нужно выяснить какое значение возвращает DTOS в случае пустого поля. И вообще, что это за функция ?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Ism писал(а):И вообще, что это за функция ?

Те, кто работал с dBase и FoxPro в конце прошлого века, её прекрасно помнят. Для более молодого поколения - заморачиваться не стоит, т.к. это уже дикий анахронизм, что-то вроде как ездить по горам на деревянном амокате, вместо горного байка. :)
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Возможно DTOS(dataprint) вообще не работает, так как компонент связан с dbf напрямую. Хотя по идее должно выдавать ошибку.
Через какой компонент подключена база данных ?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Ism писал(а):Через какой компонент подключена база данных ?

99% - через TDBF. Никаких других компонент для работы с dbf-файлами в Lazarus нет.
Ism писал(а):Возможно DTOS(dataprint) вообще не работает

Работает, если судить по сообщению:
alanpa писал(а):Как создать фильтр по дате вообще - получается, например, так:
Код: Выделить всё
dbnalog.Filter:='DTOS(dataprint)>"20110101"'
dbnalog.Filtered:=true;


Можно попробовать вообще без DTOS():

Код: Выделить всё

dbnalog.Filter:='dataprint>""'
alanpa
незнакомец
Сообщения: 4
Зарегистрирован: 12.06.2011 17:42:01

Сообщение alanpa »

Выпутался пока так:

Код: Выделить всё

if toolbutton4.down then
         dbnalog.Filter:='DTOS(dataprint)>"20110101"'
  else begin
          dbnalog.Filter:=('DTOS(dataprint)<"00010101"'); // <- магазин не имеет даты создания, если создан ранее первого года
  end; 

Те, кто работал с dBase и FoxPro в конце прошлого века, её прекрасно помнят. Для более молодого поколения - заморачиваться не стоит, т.к. это уже дикий анахронизм, что-то вроде как ездить по горам на деревянном амокате, вместо горного байка.

Подскажите, а куда смотреть, что бы тоже на байке?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

alanpa писал(а):Подскажите, а куда смотреть, что бы тоже на байке?

Смотрите в сторону любого SQL сервера. Если не требуется клиент-серверное решение, посмотрите в сторону SQLite3.
Ответить