Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выборка из DBF


Страницы:   1 2

lightix ©   (2004-02-05 13:03:00) 

Имеется таблица DBase, следующей структуры:
DATA1 Char(10),
TIME1 Char(8),
EVNT1 Char(20)

Можно ли выбрать из нее все записи, у которых дата+время >= указанного через параметр?
Или же прийдется выбирать все записи в таблице и тупо сравнивать?

В Oracle например я бы сделал преобразование с помощью функции TO_DATE в тип данных datetime и спокойно написал бы сравнение в фразе WHERE.

Как это сделать в BDE?


Sandman25   (2004-02-05 17:30:00) [1]

Понятно. Выкрутились, значит :)


lightix   (2004-02-05 17:23:00) [2]

Решил не мучаться и сделал так
DecodeTime(NowTime, Hour, Min, Sec, MSec);

if Hour<12 then
ampm:="am"
else
ampm:="pm";

Query_Copy.Close();
Query_Copy.ParamByName("dt").Value:=DateToStr(NowTime);
Query_Copy.ParamByName("tm").Value:=TimeToStr(NowTime)+ampm;
Query_Copy.Open();

Теперь все класно работает :))


Sandman25   (2004-02-05 16:37:00) [3]

Посмотрите dbiSetTimeFormat. Похоже на то, что нужно


Sandman25   (2004-02-05 16:34:00) [4]

Да какая там помощь. Вы сами все нашли. Но все равно спасибо за добрые слова :)


lightix   (2004-02-05 16:29:00) [5]

Ок, спасибо Вам огромное за помощь!


Sandman25   (2004-02-05 16:25:00) [6]

Посмотрите методы TSession. Если можно, то должно быть там ИМХО


lightix   (2004-02-05 16:24:00) [7]

А в программе можно задать формат для БДЕ?
Чтоб не задавать его на каждой машине где используется программа.. или проще самому переводить время в 12-часовое?


Sandman25   (2004-02-05 16:23:00) [8]

BDE/Configuration/System/Formats/Time/TWELVEHOUR = false


lightix   (2004-02-05 16:20:00) [9]

Блин, теперь при 11:00:00ampm думает что это 23:00 ...
Как ему сказать формат?


Sandman25   (2004-02-05 16:18:00) [10]

Как ему это сказать?

В настройке BDE попробуйте.


lightix   (2004-02-05 16:16:00) [11]

Вот написал 12:00:00ampm и работает :)))) Чудеса!


lightix   (2004-02-05 16:13:00) [12]

Нет, выбирает и 11:00 и т.п.
Вот, заметил еще если написать 12:00:00pm то выбирает как надо - видать тут нужно указать что время в 24-часовом формате...
Как ему это сказать?


Sandman25   (2004-02-05 16:09:00) [13]

А какое время есть в базе за указанную дату?
Если времена в диапазоне 12:30:01-12:59:59, то так и надо :)


lightix   (2004-02-05 16:06:00) [14]

Заработало но как-то странно.
Запрос такой:
select ev.* from "eventlog.dbf" ev
where (cast(ev.dt as date)>cast(:dt as date) or
(cast(ev.dt as date)=cast(:dt as date) and cast(ev.tm as time)>=cast(:tm as time)))

Проблема в том что если указать параметром время 12:00:00 (или даже 12:30:00) то выбирает все из таблицы по указанной дате, несмотря на время, а если скажем указать время 13:00:00 или либое другое отличное от 12 - то работает нормально.

В чем может быть проблема?


Sandman25   (2004-02-05 15:53:00) [15]

А в поле времени оно записано с двоеточием? Проверьте, что возвращает cast(tm as time)


lightix   (2004-02-05 15:37:00) [16]

да неохота переделывать - програмка готовая рабочая, писалась года 2 назад... а сейчас нужно добавить в нее одну небольшую сервисную функцию ...

Кстати, убрал из WHERE время, оставил только дату - выбирает!
Непонятно почему он не хочет время стыковать.
Может тип параметра сделать другой, не время а скажем строку, и в запросе параметр тоже CASTовать?


Sandman25   (2004-02-05 15:30:00) [17]

[4] Anatoly Podgoretsky © (05.02.04 13:48)

Понятно. Тогда автору лучше переделать структуру БД.


lightix   (2004-02-05 15:03:00) [18]

Sandman25 © (05.02.04 13:41) [3]
И с таким кодом тоже не выбирает ничего :(


Anatoly Podgoretsky   (2004-02-05 13:48:00) [19]

Sandman25 © (05.02.04 13:08) [1]
Есть, первый с 83 года, второй начиная с dBase7


Sandman25   (2004-02-05 13:41:00) [20]

cast(ev.dt as date)>=:dat and
cast(ev.tm as time)>=:tim

Это неправильное условие.
Ведь если дата больше, то время уже не важно.

(cast(ev.dt as date)>:dat1 or
cast(ev.dt as date)=:dat2 and cast(ev.tm as time)>=:tim)

dat1=dat2, конечно.

StrToDate("05.02.2004") - это подозрительно. Используйте лучше DateTimePicker1.Date


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо