Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
MS Access

Строгий поиск по базе данных

03.10.2016, 16:56. Показов 1955. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго вечера! Столкнулся со следующей проблемой: нужно осуществить "строгий" (с учетом регистра) поиск по базе данных Access. Код прикрепил.

P.S Нужно чтоб (например: admin имело отличие при поиске от AdMIn). А то ему плевать, что AdMIN, что ADMin...

Буду благодарен за любую помощь

Кусок кода:
Delphi
1
2
3
4
  // ...
  login := DM.ADOSecurity.Locate('login', EditLogin.Text, []);
  password := DM.ADOSecurity.Locate('password', EditPassword.Text, []);
  // ...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2016, 16:56
Ответы с готовыми решениями:

Поиск в ADoquery, Delphi, поиск в базе данных
Доброго времени суток многоуважаемые пользователи данного сайта! Есть очень глупая проблема, с которой я, к сожалению, справиться не...

Нужно что то по типу LIKE, только чтобы был не строгий поиск
$_GET = 'строка запроса'; LIKE name '%$_GET%' в этом варианте найдется только 'строка запроса', а можно ли сделать чтобы был не строгий...

Как осуществить поиск данных по базе данных по связи многие-ко-многим
Репозиторий SqlApplicantRepository namespace theModel.Repository { public class SqlApplicantRepository:IApplicantRepository ...

13
5984 / 4559 / 1095
Регистрация: 29.08.2013
Сообщений: 28,197
Записей в блоге: 3
03.10.2016, 17:08
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TSecurity.btInputClick(Sender: TObject);
  begin
   if (DataModule1.ADOTable1.Locate('User_name', edLogin.Text,[])) and
      (LowerCase(self.edLogin.text) = LowerCase(DataModule1.ADOTable1.Fields[1].text)) and
      (edPassword.text = DataModule1.ADOTable1.Fields[2].text) then
     begin
      showmessage ('Вход');
     end
   else
    begin
      showmessage ('Ошибка');
    end;
  end;
1
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
03.10.2016, 17:27  [ТС]
qwertehok, Попробую.
0
5984 / 4559 / 1095
Регистрация: 29.08.2013
Сообщений: 28,197
Записей в блоге: 3
03.10.2016, 17:37
Лучший ответ Сообщение было отмечено Genesiss как решение

Решение

может воспользуетесь SQL?
0
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
03.10.2016, 17:41  [ТС]
qwertehok, Результат тот же. Без разницы на регистр, пробовал зайти под логином AdMiN и спокойно идет вход, а не должно быть так.
0
5984 / 4559 / 1095
Регистрация: 29.08.2013
Сообщений: 28,197
Записей в блоге: 3
03.10.2016, 17:43
выводите логины в Combobox
0
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
03.10.2016, 17:44  [ТС]
qwertehok, Мне надо именно через ADOTable, не Query.

Добавлено через 55 секунд
qwertehok, А Lookup' ом как то можно? Просто не очень про этот метод знаю.
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
03.10.2016, 17:54
мне кажется что поиск осуществляется неверно - нужно искать одновременное совпадение по двум полям:
Delphi
1
2
3
4
if ADOTable1.Locate('FieldName1;FieldName2', VarArrayOf([edit1.text,edit2.text]), []) then 
  ShowMessage('Нашли')
else
  ShowMessage('Не нашли');
1
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
03.10.2016, 18:00
Цитата Сообщение от Genesiss Посмотреть сообщение
А то ему плевать, что AdMIN, что ADMin...
В каком смысле? Из чего видно?
Если флаг loCaseInsensitive отсутствует, а поиску вроде как "плевать", то что-то неладно в интерпретации поиска, а вовсе не в Дельфи.
Как вариант "наплевательского отношения" со стороны методов датасета:
скорее всего, в наборе данных эта строка расположена первой и тогда Locate хотя и не находит, как и положено, введенную строку, но указатель в датасете все равно указывает на эту первую строку. На что-то же он должен указывать, если данные есть.
0
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
03.10.2016, 18:15  [ТС]
Алекcей, Попробовал сделать по вашему коду, тоже самое. Пишешь ADmin - входит, пишешь adMIN - входит. А надо, чтоб входило по правильной записи (В БД Access следующие данные: "login - Admin, password - admin"). Locate не хочет учитывать регистр.

Добавлено через 3 минуты
Цитата Сообщение от Скандербег Посмотреть сообщение
В каком смысле? Из чего видно?
Если флаг loCaseInsensitive отсутствует, а поиску вроде как "плевать", то что-то неладно в интерпретации поиска, а вовсе не в Дельфи.
Как вариант "наплевательского отношения" со стороны методов датасета:
скорее всего, в наборе данных эта строка расположена первой и тогда Locate хотя и не находит, как и положено, введенную строку, но указатель в датасете все равно указывает на эту первую строку. На что-то же он должен указывать, если данные есть.
Ну и что тут неправильного?
Delphi
1
login := DM.ADOSecurity.Locate('login;password', VarArrayOf([EditLogin.Text,EditPassword.Text]), []);
Стоит задача - Нужен поиск с учетом регистра.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
03.10.2016, 18:43
Цитата Сообщение от Genesiss Посмотреть сообщение
Нужен поиск с учетом регистра
Да, правда, в АДО не учитывается отсутствие флага loCaseInsensitive. Печально. Значит только SQL поможет.
0
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
03.10.2016, 18:59  [ТС]
Скандербег, Попробовал искать через Lookup и тоже без результата, строка копируется как admin, то есть, без разницы как будет в БД написано (ADMin, admIN...) всегда будет брать в нижнем регистре, без учета.

Добавлено через 1 минуту
Скандербег, Ну попробую через ADOQuery.
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
03.10.2016, 20:07
Раз не выходит через locate можно попробовать проверить наличие простым перебором всех записей (while not eof)
1
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
03.10.2016, 20:21  [ТС]
Алекcей, Уже сделал через ADOQuery) Теперь все работает идеально!


Всем спасибо за ответы. Тема закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2016, 20:21
Помогаю со студенческими работами здесь

Реализовать поиск и выбор данных в форме в базе данных Access
Здравствуйте! Подскажите пожалуйста,как реализовать поиск и выбор данных в форме в базе данных Access. Заданы таблицы товар,тип товара,...

Поиск в базе данных (поиск далее)
Добрый вечер! Нужна ваша помощь. Делаю поиск по базе, использую компонент AdoTable. В базе есть Одинаковые строки, нужно чтобы при нажатии...

Поиск по базе данных + постраничный вывод данных
Привет всем! в общем с поиском данных всё нормально! но не работает постраничный вывод ((( не знаю, где не так (! посомтрите пожалуйста,...

Поиск по базе данных
Здравствуйте товарищи. Нужна ваша помощь. Есть база данных сделанная в акцес там примерно 20 таблиц. В делфи мне нужно сделать поиск по...

Поиск по базе данных
Помогите пожалуйста, нужно сделать поиск по базе данных, но при вводе в поле поиска выдает ошибку. procedure TForm4.Edit1Change(Sender:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru