Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 15:42   #1
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию не работает Locate

пишу следущее
Код:
Name:='1234';//String
OldDate:=AdressQuery.FieldByName('Дата_вызова').AsDateTime;
AdressTable.Locate('Клиент;Дата_вызова',VarArrayOf([Name,OldDate1]),[loCaseInsensitive,loPartialKey]);
поиска не происходит хотя вижу что дата есть такая. Если поиск делать по одному полю Клиент то ищет нормально, а с датой нелады
поле Клиент тип String
поле Дата_вызова тип Дата/Время
БД Access
SERG1980 вне форума Ответить с цитированием
Старый 26.03.2009, 16:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Притаком поиске нужно позицию курсора учитывать.
Locate начинает поиск с текущей строки
AddressTable.First сделай перед поиском.

p.s. Плохой это метод, имхо...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.03.2009, 16:25   #3
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

OldDate и OldDate1 - это опечатка или причина?
Антон Ю.Б. вне форума Ответить с цитированием
Старый 26.03.2009, 16:26   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Антон Ю.Б. Посмотреть сообщение
OldDate и OldDate1 - это опечатка или причина?
Это опечатка
SERG1980 вне форума Ответить с цитированием
Старый 26.03.2009, 16:30   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение

p.s. Плохой это метод, имхо...
Stilet а как посоветуешь?
SERG1980 вне форума Ответить с цитированием
Старый 26.03.2009, 16:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы луче SQL юзал... Надежнее...
Ну на крайняк lookUp...
Я просто однажды намучился этим методом вплоть до выговора, это когда не дружил с SQL, потом плюнул - почитал по нему мануал и забыл что такое DB методы на славу себе и моим разработкам

Впрочем это ИМХО из личных переживаний
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.03.2009, 16:48   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот пример, в точности повторяющий ваш, но на основе clients.dbf из демо-каталога DATA:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var OldDate: TDateTime;
    Name: string;
begin
Name:='Parker';
OldDate:=StrToDate('23.10.1990');
Table1.Locate('LAST_NAME;DATE_OPEN',VarArrayOf([Name,OldDate]),[loCaseInsensitive,loPartialKey]);
end;
Все распрекрасно работает.
Мое предположение - у вас несовпадение форматов представления дат в системе и в базе.
mihali4 вне форума Ответить с цитированием
Старый 26.03.2009, 16:52   #8
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Спасибо учтём!!!
SERG1980 вне форума Ответить с цитированием
Старый 26.03.2009, 16:56   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Мое предположение - у вас несовпадение форматов представления дат в системе и в базе.
Может быть. попробовал переменной присвоить значение вручную
Код:
 OldDate1:=strtodatetime('26.03.2009 14:28:00');
Когда секунды равны нулю то поиск работает а если
Код:
 OldDate1:=strtodatetime('26.03.2009 14:28:12');
то не работает хотя значение поля Дата_вызова 26.03.2009 14:28:12
SERG1980 вне форума Ответить с цитированием
Старый 26.03.2009, 17:04   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Тут дело в представлении времени - это дробная часть DateTime.
И если вы прочитаете из базы OldDate:=AdressQuery.FieldByName('Д ата_вызова').AsFloat и сравните ее дробную часть с EncodeTime(14, 28, 12, 0) - это , 14:28:12:00, то увидите, что они вовсе даже не равны. И из-за этих самых миллисекунд и небесконечного количества знаков после запятой ваш метод не пройдет.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Locate с условием в DBGrid artemavd БД в Delphi 6 24.03.2009 23:44
Проблема с UserForm. То работает, то НЕ работает Maxx Microsoft Office Excel 6 19.11.2008 14:51
Locate Killbrum БД в Delphi 11 03.09.2008 10:01
Unable to locate file Febreze Компоненты Delphi 1 13.05.2008 22:12
Locate без учета регистра символов _SERGEYX_ БД в Delphi 2 09.08.2007 09:52