Форум: "Базы";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];
ВнизПоиск в DataSet по полю типа Date Найти похожие ветки
← →
Мышь (2002-09-18 20:00) [0]Здравствуйте, Уважаемые! Я пишу свой DBGrid, так как надоело мучиться со стандартными.
Тем более, что заказчики имеют оригинальные желания. Данную затею обсуждать не
стоит, а проблема в следующем: я хочу поискать в DataSet запись методом Locate по полю
типа Date (в частности). Совсем не хочет. Скажите, пожалуйста, это вообще реально?
Не ищется даже при сохранении значения поля в Variant, переходе на другую запись
и поиске по сохраненному значению. Можно, конечно, и без этого, но все-таки интересно.
Заранее благодарен.
← →
MsGuns (2002-09-18 21:53) [1]Как выглядит строка с Locate ?
← →
sniknik (2002-09-18 22:08) [2]где ищеш? тип базы, таблиц? если dbf это одно MSSQL другое в самом датасете? а внутреннюю структуру знаеш?
возможно ишеш дату там где DateTime естественно совпадений не будет даже если через Variant.
← →
Мышь (2002-09-19 21:18) [3]Я ищу запись в TQuery, полученный из MSSQL70 в D6, хотя, видимо, это и не важно.
Допустим, есть текущая запись, и мы делаем так:
V := Query1.FieldByName("Date").Value; (соответственно, V: Variant)
Затем, меняем текущую запись и делаем так:
Query1.Locate("Date", V, []);
Возвращается False, то есть ничего не найдено.
Естественно, в самом Grid"e все сложнее, но даже такой простой вариант не работает.
Таким образом, либо значение в V: Variant портится, либо Locate хочет чего то другого. Чего?
← →
sniknik (2002-09-19 22:38) [4]как не важно, если TQuery и MSSQL значит используеш прослойку вроде BDE или ODBC а они коверкают запросы по своему усмотрению.
смотри вот это работает
ADODataSet1.Locate("_Date", "24.06.2002", []);
это тоже
V:= ADODataSet1.FieldByName("_Date").Value;
ADODataSet1.First;
ADODataSet1.Locate("_Date", V, []);
(V естественно ...)
но только если соответствующие языковые настройки (английское написание будет 06.24.2002, и если в поле только дата, если там еще и время 06.24.2002 09:58:05. разницу замечаеш?
соеденение
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Work\CashBase.mdb;Persist Security Info=False
на всякий случай.
ADOQuery1 по аналогии тоже работает.
чему у тебя равен V после присваивания?
← →
Мышь (2002-09-21 21:15) [5]V после присваивания равен тому, что я вижу в BDGrid - только Дата. А как вообще работает поиск? Разве при этом используется BDE?
← →
sniknik (2002-09-21 23:25) [6]ну к примеру если квери "живой" то где он будет искать в оторваном датасете или всетаки в базе на случай если база уже изменилась?
-> равен тому, что я вижу
то есть строка как здесь "24.06.2002" да?, а ДатаТайм типа дабл. Что никаких преобразований не происходит?
← →
sniknik (2002-09-22 00:07) [7]в общем чтобы не мучился с вопросами сам залез в модуль ADODB
function TCustomADODataSet.Locate(const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions): Boolean;
begin
DoBeforeScroll;
Result := LocateRecord(KeyFields, KeyValues, Options, True);
if Result then
begin
Resync([rmExact, rmCenter]);
DoAfterScroll;
end;
end;
вот эта хрень тебе все и портит. с не ADO -ным локейтом все запутаней но думаю механизм тот же.
← →
Мышь (2002-09-22 18:40) [8]Спасибо за внимание, попробую что нибудь придумать...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c