TTable.Filter

5 отговора 346 прегледа
#1

TTable.Filter

Здравейте.

Може ли да помогнете, имам следния въпрос.
Правя елементарна програма в която има няколко таблици на Пардокс.
В тях пък има полета от тип Date и няколко полета от тип Time..
Филтрирам по дата използвайки tblCounters.Filter..- работи, но
Филтрирането по час :

tblCounters.Filter:='cutOperTime='+QuotedStr('16:14:47')
ми дава празна таблица въпреки, че има записи с такива стойност в полето. Опитах същото в QBE. Там резултатът е същия.
Ако сменя знака така -
tblCounters.Filter:='cutOperTime>' + QuotedStr('16:14:47')

филтъра работи.
Вероятно участват и милисекундите.. не съм сигурен и май не мога да се оправя. Давайте съвети .. Опитвах доста варианти..различно формтиране и тнт, но нямам представа защто е така.

Благодря ви.

Мишо

Отговор
в отговор на Mишo #2

Re: TTable.Filter

На прав път си - датите се представят като double - което е реално число - за това по добре работи със филтър който обхваща период - >= Д1 и <= до Д2 а не директно като = Д. Друг вариант е да си направиш собствено целочислено представяне на времето- и да прекодираш данните - ама е тъпо и по-бавно.

---
Отговор
в отговор на Mишo #3

Фантома пише, че е по-бавно: разбирай разработката

Щото всеико останало е по-ефектиено, но се разработва бавно.
Аз работя по този начин и го считам за оптимален. Обикновенно в GetText на филдовете прекодирам.
А разработката е по-бавна, докато си направиш процедурите, по-нататък е същото :)

Отговор
в отговор на PhantomAS #4

Re: TTable.Filter

Ех, това е било наистина.
Хитро и простично решение.
Благодаря ти!
А, аз бях тръгнал да се ровя с IncMilliSecond и MilliSecondOf...

Отговор
в отговор на NikB #5

Re: Фантома пише, че е по-бавно: разбирай разработката

Я обясни как става тая работа с GetText на филдовете и прекодирането.

AJ™
Отговор
в отговор на AJ™ #6

Може и да не е точно прекодиране :)

Ами ако си помня в полето секунди, а искам в грида (или където се извежда текста) да ми излиза DDD,HH:MM:SS (напр. дни, часове и секунди), в обработяика на събитието GetText на филда си правя сметките:

{}procedure TForm_JrnMySQL_1.GetText_LvIDrRazh(Sender: TField; var Text: String; DisplayText: Boolean);
begin
Text := FloatToStrF(0.1*Sender.AsInteger,ffFixed,20,1)+' %';
end;

(Примерът е първият ми попаднал - не е дата/час - може да се проверява за валидност :))

Отговор