![]() |
|
![]() ![]() ![]() |
|
RinOSpro |
|
||||||||
Unregistered |
Функция Locate не работает с параметрами.
У меня БД, использую функцию Locate по полю ФИО:
Всё работает. Например в БД есть запись с ФИО Иванов Иван Иванович если в Edit1.Text ввожу Иванов Иван Иванович то он находит эту запись в бд а если Иванов то нет. Без параметров эта функция Чувтвительна к регистру и ('Иванов Иван Иванович'<>'Иванов'). Но параметры не работают DataModule1.ADOTable1.Locate('ФИО', Edit1.Text,[loCaseInsensitive, loPartialKey]) вот так это уже не работает. Бд ADO, Связные таблицы. Не много информации о Locate может что я не так делаю. Класс TDataSet является базовым классом компонента, реализующим функции доступа к БД. Многие из его методов являются абстрактными и реализуются в потомках. Он имеет два метода для поиска данных: Locate и Lookup. Данные методы ищут запись, удовлетворяющую заданным условиям.
Разница между ними в том, что функция Locate при поиске записи позиционирует курсор на найденную запись, а Lookup не делает этого. Если поля указанные для поиска индексированы, то поиск производится с использованием индекса, что значительно ускоряет поиск. В качестве примера рассмотрим использование данных методов на примере TTable в двухуровневом приложении. Итак, начнем с генерации нового приложения File/New Application. Мы получим проект приложения с главной формой. На данную форму поместим компонент Table с закладки Data Access, по умолчанию он будет иметь имя Table1. Теперь настроим компонент Table1 на взаимодействие с таблицей country из базы данных DBDEMOS. Для этого необходимо установить следующие свойства Table1 в следующей последовательности:
Разберем код более подробно. Строка Table1.Locate организует поиск записи в таблице Country. Первый параметр этой функции - поля, значения которых нужно проверять. В данном случае мы ищем запись по одному полю Name. Второй параметр, что шаблон поиска и третий опции поиска. Функция возвращает значение типа boolean, указывающее на успешность поиска. Теперь пришло время протестировать наш пример. Запустим программу на выполнение, в строке ввода пишем Cuba и нажимаем кнопку Locate. Курсор в DBGrid1 должен переместиться на запись, имеющую в поле Name введенное значение. Однако наш пример имеет пока один недостаток, в строку редактирования необходимо вводить полное имя c учетом регистра, т.е если мы вместо Cuba введем, например Cu или cuba, то наш поиск будет безрезультатным. Естественно это не может нас не устраивать. Поэтому пришло время рассмотреть более подробно опции поиска. Данный параметр имеет тип TlocateOptions и позволяет задавать набор из двух параметров поиска: loCaseInsensitive и loPartialKey. Установка первого из них отменяет чувствительность к регистру в текстовых полях, а второй позволяет искать запись частично соответствующие заданному условию. С учетом вышесказанного код обработчика событий будет выглядеть следующим образом:
|
||||||||
|
|||||||||
SergeBS |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
RinOSpro,
Делай так: DataModule1.ADOTable1.Locate('ФИО', TRIM(Edit1.Text),[loCaseInsensitive, loPartialKey]) во-первых. Во-вторых, за забивку в одно поле и Ф, и И, и О - вообще-то бьют канделябром. Поскольку, например, количество пробелов между Ф и И - штука неизвестная заранее, а потому Иванов Иван Иванов Иван это разные люди. Короче - сам себе злобный буратино ![]() Добавлено @ 15:55 RinOSpro, Вдогонку: учебники зачем цитировать? Для солидности? ![]() |
|||
|
||||
RinOSpro |
|
|||
Unregistered |
SergeBS, я и говорю DataModule1.ADOTable1.Locate('ФИО', TRIM(Edit1.Text),[loCaseInsensitive, loPartialKey])
loCaseInsensitive, loPartialKey delphi пишет что не знает что такое а учебники цетировать что бы было понятно как та или иная функция используется! может эта информация поможет. А вот на счет фио в одной ячейке пофиг мне хотябы вытащить фамилию, БД не оч большая |
|||
|
||||
Savek |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
||||
|
||||
Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 2 Всего: 6 |
RinOSpro, эти константы определены в DB.pas. Возможно, он у тебя не подключен в uses
--------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
bagira |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
...Вот и у меня примерно так же... В полном виде работает (без дополнительных параметров, просто с пустыми квадратными скобками - когда ввожу тест полностью и со всеми заглавными буквами) - то все прекрасно! А когда пишу вместе с [loCaseInsensitive, loPartialKey] - и ввожу короткий текст без заглавных букв - не находит! С теми же параметрами - но вводя ПОЛНУЮ информацию - ищет прекрасно!!! ...Сегодня пол-дня вот так промучилась. И спросить-то не у кого... И в интернет с работы выхода нет... ![]() -------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
SergeBS |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
bagira,
НУ СКОЛЬКО МОЖНО? Еще раз: trim(Edit.Text)!!!! Иначе естественно НИЧЕГО не найдет, поскольку будет искать "Иванов ". А с trim - на ура. Проверено. Учтите так ищет с начала строки! Хотите чтобы везде - пишите не 'ванов', а '%ванов' (ADO = SQL!). |
|||
|
||||
bagira |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Так я ТРИМ использовала тоже до этого... и нифига... ![]() Я тогда подумала, что дело не в нем, и убрала... -------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
![]() -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
SergeBS |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Данкинг,
Еще раз:
или
иначе незаметный пробел при вводе в хвосте/начале или маске (maskedit) угробит поиск |
||||
|
|||||
bagira |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Параметры [loCaseInsensitive, loPartialKey] работают у меня, к сожалению, только с латинскими буквами. Если текст русский - параметры эти просто игнорируются...
![]() -------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
SergeBS |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
bagira,
Что-то из области фантастики... СУБД какая? И код в студию. |
|||
|
||||
Sportsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 3.11.2006 Где: Раша Родина наша- Старый Оскол Репутация: нет Всего: нет |
У меня и с Trim не фига не получаеться...
![]() P.S. Paradox, BDE. Это сообщение отредактировал(а) Sportsmen - 18.5.2007, 19:27 |
|||
|
||||
RinOSpro |
|
|||
Unregistered |
Если у кого такие же проблемы сначала нужно установить праметры поиска это делается так:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |