![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в базе, чувствительный к регистру [D6, Access 2000 mdb]
Jungle © (2002-07-12 11:28:00)Как бы осуществить Partial поиск (без SQL), чувствительный к регистру, в ADOTable. Через Locate не получается. Т.е. если есть запись со значением "amZ", а пишешь
Locate("Key", "amz", [loPartialKey]) - он устанавливается на эту запись, а не должен бы по идее...
В чем дело? Не подскажете как с этим бороться?
Jungle (2002-07-15 11:55:00) [1]Что за дела!
Закрываю таблицу.
Пишу IndexName="Key"
Открываю таблицу - OLE Error.
Мозги пухнут уже...
roottim (2002-07-15 10:53:00) [2]Все верно!.. адо не держит case для Jet
пришла одна мысль(непроверял),
а что если воспользоваться методом Seek из _Recordset!
Jungle (2002-07-15 08:06:00) [3]Я так и делаю, только Букмарк не использую...
sniknik (2002-07-12 20:53:00) [4]Кстати мне идея в голову стукнула. Самый простой путь как написать свой Locate.
запоминаеш состояние таблици (Букмарк)
вызываеш стандартный Locate
проверяеш в зависимости от ключа loCaseInsensitive совпадение строки и ключа поиска.
не подходит откат.
быстрей будет чем циклы по таблице гонять.
Anatoly Podgoretsky (2002-07-12 20:40:00) [5]Jungle © (12.07.02 14:25)
Кажется что ты пытаешься работать с АДО как с БДЕ парадокс/дбейс таблицами, вроде бы для Акцесс другии ограничители, не буду конечно утверждать, но в любом случае тебе нужен зелп не по Дельфи, а по Акцессу и конечно ставить апдейт обязательно, что очень важно для коммерческой программы, он устраняет некоторые ошибки, ты с ними еще столкнешься,
sniknik (2002-07-12 20:33:00) [6]CaseSensitive не поддерживается в ADO (я проверил) при подключении к Access, Dbf через Jet и через ODBC (только для dbf проверял) а также наверно и в других случаях, т.к. упоминания о loCaseInsensitive я не нашол в модуле ADODB в частности в процедуре TCustomADODataSet.LocateRecord (чего там ожидалось если бы работало).
по аналогии с TBDEDataSet.LocateRecord (где есть и работает)
можно с претензиями к борланду обращатся (если бы легальное по юзали :-)
p.s. апдейтил ADO совсем недавно, думаю у меня последняя версия на сегодня.
Jungle (2002-07-12 15:09:00) [7]Опасно... Я щас отлаживаю коммерческую прогу (не ту, в которой Locate), мало ли чего случится...
Да... Ну и дела...
Johnmen (2002-07-12 14:57:00) [8]Удивительно ! Может еще один баг ?
А ты лучше скачай апдейт для ADO и посмотри, что будет.
Где качать - не помню, поищи - найдешь !
Jungle (2002-07-12 14:46:00) [9]Вообще-то можно. Вот цитата из Хелпа (Setting the Filter Property):
* wildcard for partial comparisons (FilterOptions must include foPartialCompare)
Правда, foPartialCompare не существует для ADOTable.
Но суть в том, что и без * фильтр не работает. Это я уж от безысходности ее туда воткнул...
Johnmen (2002-07-12 14:34:00) [10]В выражении фильтра маска недопустима.
Jungle (2002-07-12 14:25:00) [11]Вот только если баг...
Слушай, а с фильтром работал?
Я пишу:
Filter := "Key = " + QuotedStr(LabeledEdit1.Text+"*");
Filtered := true;
Вообще ничего не выходит (дело не в "*", которая, как ты понимаешь, означает любой символ) ...
Если вместо "=" поставить, к примеру ">=", то он фильтрует, но, естественно, не так как надо.
Может это я чего-то неправильно делаю?
Johnmen (2002-07-12 14:19:00) [12]Нет, я пробовал с IBDataSet"ом с IB"ишной базой.
Есть предположение, что это баг в ADO....
Jungle (2002-07-12 13:59:00) [13]Ну и какие соображения? В чем может быть дело? Поверь, я просто так, без попыток докопаться до сути, писать бы не стал. Да и не дурак, вроде...
Ты с ADOTable пробовал, с Access"овской базюкой? Если да, то я ничего не понимаю...
Johnmen (2002-07-12 13:23:00) [14]Ну правильно говоришь...
Вот разве что я сейчас попробовал
Locate("...",...,[loPartialKey]);
ВСЕ РАБОТАЕТ КАК ОЖИДАЛОСЬ!!!
Jungle (2002-07-12 12:52:00) [15]Понимаешь ли, согласись с одним фактом.
Если в опциях к Locate есть параметр LoCaseInsensitive, значит подразумевается, что без него поиск должен быть чувствительным к регистру - не так ли?
А насчет творческого начала вот что. Можно ведь и с кучей крутых компонентов написать полную лажу (правда и со стандартными тоже). Все дело в том - как наиболее рациональным способом (с наименьшим количеством кода и проблем) достичь максимального эффекта (быстродействие, безглючность и т.п.). Творческий подход как раз в этом и заключается - эффективно и рационально использовать предлагаемые тебе средства.
Если брать стандартные компоненты, то с большой долей уверенности можно ожидать (все-таки Delphi - продукт серьезный), что твое творение будет нормально работать на разных конфигурациях компьютеров (если только сам не лажанешься). А вот если брать "левые" (особенно бесплатные), то в совершенно непредсказуемый момент может проявиться черт знает что.
Johnmen (2002-07-12 12:36:00) [16]>Jungle © (12.07.02 12:21)
>Чем больше стандартных функций (если они удовлетворяют
>требованиям задачи) - тем лучше.
Ты можешь написать письмо Борланду, типа, "что это ты, засранец, заставляешь меня занималься извратом и писать прогу ? я хочу складывать ее из изготовленных тобой кирпичиков ! и не париться с выдумыванием своих алгоритмов и приемов..."
А где же творческое начало ?
Jungle (2002-07-12 12:21:00) [17]Я его уже давно написал. И хотя все коротко и цивильно, и даже правильно работает :), все равно - изврат.
Чем больше стандартных функций (если они удовлетворяют требованиям задачи) - тем лучше.
А нестандартными компонентами не пользуюсь из принципа - случись чего (потеряется или т.п.) - задолбаешься из д..ма откапываться...
Johnmen (2002-07-12 12:11:00) [18]>Jungle ©
1. Я тоже к ним не отношусь
2.
3. Нет
>Я не отношусь к разработчикам средств разработки
Это здесь непричем ! Просто напиши цикл обхода НД, в котором осуществляется проверка значения нужного поля на то, что надо.
Jungle (2002-07-12 12:05:00) [19]Значит так.
1. Я не отношусь к разработчикам средств разработки.
2. У меня не настолько крутая задача, чтобы наживать лишний геморрой на свою голову :)
3. Я не ожидаю, чтобы мне приводили куски кода. Мне интересно, существует ли СТАНДАРТНЫЙ способ (готовая функция или процедура), осуществляющая описанные действия. Может, нужно где-то какой-то параметр изменить. Или это связано с самой базой. (Я с базами работал постольку-поскольку, поэтому не шибко шарю во всяких тонкостях).
Anatoly Podgoretsky (2002-07-12 11:55:00) [20]Jungle © (12.07.02 11:46)
И что тут такого, если стандартное поведение не нравится и есть жедание, почему бы не написать, а может лучше изменить подход к написанию, что бы делать в рамках стандартных возможностей.
Не беда Джонов, что им приходится отвечать на подобные вопросы.