Locate не находит дату

lihach

ввожу строчкуdataModule2.HistoryTable.Locate('DATA', '09.09.2009' , [loPartialKey])отчётливо вижу её в таблице,но locate возвращает false и соответсвенно ничего не находит.В чём дело то?
24 ответа

lihach

Ты ее должен точно ввести, до 15 знака, а не то что ты видишь на экране.Или у тебя не дата, а строка, тогда ты это зря?--http://www.podgoretsky.com


lihach

про 15 знаков не понял.В таблице History есть поле DATA и оно fkDate.И в таблице Acess я вижу не 15 знаков,а дату в формате dd.mm.yyyy(09.09.2009)? и поле там тоже имеет тип Дата.


lihach

Прочитал на форуме,что может быть связано с несоответствием формата в базе данных.Так я выставил Краткий формат даты,так он всё равно ничего не находит


lihach

1. В Акцессе нет полей типа fkDate2. Ты в функцию подаешь строку--http://www.podgoretsky.com


lihach

Прочитал на форуме,что может быть связано с несоответствием формата в базе данных.Так я выставил Краткий формат даты,так он всё равно ничего не находит
Еще раз, у тебя что поле строковое, иначе о какой несовместимости может идти речь.


lihach

Поле DATA в Delphi в таблице ADOTableHistory имеет формат fkDate. Поле DATA в Acess откуда получает данные ADOTableHistory имеет Краткий формат даты.


lihach

А формат того,чего я ввожу вроде всё равно как Variant понимается. Даже при strToDate('09.09.2009') ничего не работает.


lihach

Ты упорно ничего не хочешь слышать.--http://www.podgoretsky.com


lihach

Да я слушаю,слушаю.Не надо подавать в функцию строчку,если я хочу получить значение.Так? Ну так как не подавать строчку,а именно данные в формате даты?Пробовал через DateTimePicker, не находит. А поле не строковое,а имеет формат fkDate. Это тоже строка штоль?


lihach

Не надо ни строку, ни DateTimePicker, нужно точное значение, как минимум 15 знаков в формате с плавающей запятой, но и это не поможет, поскольку нельзя использовать точное сравнение для чисел с плавающей запятой.fkDate по индексу в справке не находится, но не может Акцесс хранить только дату, не умеет он это, только дата.время.--http://www.podgoretsky.com


lihach

Можешь попробовать взять точное значение из поля, переместиться и потому сделать позиционирование.--http://www.podgoretsky.com


lihach

Кстати [loPartialKey] применимо только к строкам--http://www.podgoretsky.com


lihach

dataModule2.HistoryTable.Fields[2].AsDateTime:=DateTimePicker1.Date; dataModule2.HistoryTable.Post;вот так я ввожу туда дату. А позиционирование через Locate мне нужно для поиска в таблице в другой,и искать прямо в этой таблие (таблице Personal) я не могу,тк там нету поля DATA, она имеет только связь с History if dataModule2.HistoryTable.Locate('DATA', '09.09.2009', []) then showmessage('!!!') else showmessage('ghgh');FindString:='ID'; dataModule2.FindQuery.Active:=false; DataModule2.FindQuery.SQL.Clear; DataModule2.FindQuery.SQL.Add('select *'); DataModule2.FindQuery.SQL.Add('from [Сотрудники]'); DataModule2.FindQuery.SQL.Add('where ' +FindString+ ' like '+'"%'+inttostr(dataModule2.HistoryTableID.Value)+'%"'); ShowMessage(DataModule2.FindQuery.SQL.Text); dataModule2.FindQuery.Active:=true;


lihach

Поэтому мне негде взять точное значение. А сообщение ShowMessage(datetostr(dataModule2.HistoryTableDATA.Value));выдаёт 08.09.2009, что в точно соответсвует значению первой строки в таблице History.


lihach

fkDatа, согласен,это не дата,а данные,прогнал. Но это не решает проблемы. Вы говорите что у меня в поле сейчас совсем не дата,а число с плавающей точкой...хм,как тогда организуют поиск по дате? Не может быть чтобы это было простое число


lihach

Вообще-то дата в БД и хранится в виде числа с плавающей запятой.


lihach

Искать то как?????? Как задать условие поиска в Locate,чтобы найти правильно значение даты?http://sql.ru/forum/actualthread.aspx?tid=507000&hl=locate+%e4%e0%f2%e0 Здесь тоже я смотрю ответ не нашли. Как там дата храниться я не знаю,согласен. Так как искать?


lihach

dataModule2.HistoryTable.Fields[2].AsDateTime:=DateTimePicker1.Date; dataModule2.HistoryTable.Post;вот так я ввожу туда дату. А позиционирование через Locate мне нужно для поиска в таблице в другой,и искать прямо в этой таблие (таблице Personal) я не могу,тк там нету поля DATA, она имеет только связь с History if dataModule2.HistoryTable.Locate('DATA', '09.09.2009', []) then showmessage('!!!') else showmessage('ghgh');FindString:='ID'; dataModule2.FindQuery.Active:=false; DataModule2.FindQuery.SQL.Clear; DataModule2.FindQuery.SQL.Add('select *'); DataModule2.FindQuery.SQL.Add('from [Сотрудники]'); DataModule2.FindQuery.SQL.Add('where ' +FindString+ ' like '+'"%'+inttostr(dataModule2.HistoryTableID.Value)+'%"'); ShowMessage(DataModule2.FindQuery.SQL.Text); dataModule2.FindQuery.Active:=true;
Но это то не дата '09.09.2009', а строкаПотом дальше вообще чудеса, вне зависимости от результат выполняются какие то операции, отсюда вывод выкинуть текст с Locate как лишний


lihach

Искать то как?????? Как задать условие поиска в Locate,чтобы найти правильно значение даты?http://sql.ru/forum/actualthread.aspx?tid=507000&hl=locate+%e4%e0%f2%e0 Здесь тоже я смотрю ответ не нашли. Как там дата храниться я не знаю,согласен. Так как искать?
Просто надо задать точную дату, в том виде в каком она хранится и молиться, чтобы точное сравнение прошло.


lihach

Вообще-то дата в БД и хранится в виде числа с плавающей запятой.
Это он не может никак понять, что отображение не совпадает с хранением.


lihach

Поэтому мне негде взять точное значение. А сообщение ShowMessage(datetostr(dataModule2.HistoryTableDATA.Value));выдаёт 08.09.2009, что в точно соответсвует значению первой строки в таблице History.
У тебя что ИД в таблице нет, это зря


lihach

dataModule2.StatusTable.Locate('Naimenovanie', FindEdit.Text, [loPartialKey, loCaseInsensitive]); ShowMessage(inttostr(dataModule2.StatusTableID.Value)); //ищу строку в Status например "Инженер" введённую в поле Edit Указатель переместился на строку с Инженером FindString:='Dolzhnost_ID'; dataModule2.FindQuery.Active:=false; DataModule2.FindQuery.SQL.Clear; DataModule2.FindQuery.SQL.Add('select *'); DataModule2.FindQuery.SQL.Add('from [Сотрудники]'); DataModule2.FindQuery.SQL.Add('where ' +FindString+ ' like '+'"%'+inttostr(dataModule2.StatusTableID.Value)+'%"'); //теперь в поиске FindString из таблицы Personal поле 'Dolzhnost_ID', а DataModule2.StatusTableID.Value это например 2, это значение есть в таблице Personal Dolzhnost_ID и запрос показывает мне все данные с таким значение уже в таблице Personal. те я ввожу в поле Инженер, а получаю строки Personal со значением 2 (Dolzhnost_ID=ID (в статусе)) //ShowMessage(DataModule2.FindQuery.SQL.Text); dataModule2.FindQuery.Active:=true;тоже самое хочу провернуть с датой


lihach

поэтому как убрать Locate?Что искать то будем?


lihach

Не можешь с Locate (не понимаешь), то используй запросы.--http://www.podgoretsky.com