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

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

DateTime [D5, IB5.x]


Ал ©   (2002-06-20 09:00:00) 

Подскажите пожалуйста
Проблема в следующем:
есть поле типа TDateTime, возможно ли осуществить поиск
(Query.Locate) только вводя дату, без времени??? (т.к. время узнать с точностью до секунды практически невозможно)


Turalyon   (2002-06-21 13:26:00) [1]

К сожалению у меня еще очень маленький опыт по работе с IB... но я исправляюсь :))


Alexandr   (2002-06-21 13:19:00) [2]

ну многие исходники компонентов есть в поставке дельфи, да и практика остается.


Turalyon   (2002-06-21 13:16:00) [3]

Хм.. я как то в исходники не лазил :) Кто же их даст...


Alexandr   (2002-06-21 13:13:00) [4]

не верь хелпу.
Верь исходникам и практике.


Turalyon   (2002-06-21 13:06:00) [5]

>> Alexandr ©
Но ведь это из хелпа по TIBCustomDataSet...
Или им просто было лень переписывать хелп???


kaif   (2002-06-21 12:38:00) [6]

Если на IB6.0 перейти, эту проблему можно решить.
1. там можно вывести дату в YYYY-MM-DD формате.
2. там можно ее разобрать на год, месяц и день.
3. там можно привести поле датавремя (timestamp) к дате CAST(my_timestamp_field as DATE), так как IB6 различает типы данных:
DATE, TIME, TIMESTAMP (последний соответствует типу DATE IB5.*)


Alexandr   (2002-06-21 12:08:00) [7]

Ага, но только для парадокса, Dbf и прочих файловых баз.

Для клиент-сервера доступа к серверным индексам нет, а локальные индексы BDE создавать никогда не умела.


Turalyon   (2002-06-21 08:19:00) [8]

>> Alexandr ©
Из хелпа для TIBCustomDataSet.Locate
...
Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.
...
Так, что если все же ищем Locate по индексированному полю используются индексы.


Alexandr   (2002-06-21 06:08:00) [9]

а я для кого сказал, что искать не как TdateTime а как string?
в select .....
сделай приведение типа с помощью UDF (если хочешь, дополнительным полем)
А UDF потому что стандартный case тебе в 01-JAN-2001 приведет, а надо в 01.01.2001 если я правильно понял.

А вообще, смысла в Locate особого нет для клиент-сервера: он все-рано индексы не импользует, а использует перебор.
Ну так и напиши свой locate, который будет искать то, и как тебе нужно.


Ал   (2002-06-20 19:57:00) [10]

fool © :
Это справедливо для поля типа TString (!!!!!!), но никак ни TDate или TDateTime. Попробуй, если не веришь.


fool   (2002-06-20 16:09:00) [11]

>Turalyon © А Locate разве не полное совпадение ищет??
Из хелпа:
loCaseInsensitive Key fields and key values are matched without regard to case.
loPartialKey Key values can include only part of the matching key field value; for example, "HAM" would match both "HAMM" and "HAMMER."
Я думаю - понятно, и еще думаю, что Locate подойдет


Ал   (2002-06-20 15:15:00) [12]

Alexandr © :
Так не получится.


Ал   (2002-06-20 15:13:00) [13]

Turalyon © :
Попробую.Спасибо.


Turalyon   (2002-06-20 14:17:00) [14]

>Alexandr ©
А Locate разве не полное совпадение ищет??? (Это к тому что с секундами все равно проблеммы будут)


Alexandr   (2002-06-20 14:09:00) [15]

Locate(.....[loPartialKey])
не подойдет?
И искать как стринг.


Turalyon   (2002-06-20 13:10:00) [16]

Зачем... можно сделать так... (щас меня специалисты ругать начнут :))
Делаешь SQL запрос, получаешь ключ твоей записи... а потом Loacate делаешь не по полю со временем (TDateTime), а по ключевому полю. Думаю это не сильно замедлит работу компьютера.


Ал   (2002-06-20 12:58:00) [17]

Turalyon ©:
Спасибо и на этом. Скорее всего придется писать свою
ф-ию перевода в строковый формат, а затем поиска.


Turalyon   (2002-06-20 09:20:00) [18]

При помощи Locate думаю нет...
Можно посоветовать воспользоваться SQL запросом... там можно найти без проблем.


Наверх

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