Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 49

Delphi, MS Access, фильтрация по бд

03.04.2018, 08:04. Показов 848. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.
Программа начала чудить спустя год времени)
Есть бд на 100к+ записей, подключение в delphi через ADO, в программе реализован поиск через оператор LIKE с символом «%».
В бд есть таблица "Archive" с столбцом "Draw_Name" по которому у меня происходит поиск необходимых записей. Последние записи у меня содержат слова "Материалы изысканий", пытаюсь найти строки содержащие эти слова, но из многообразия записей выбирает 4 записи и не более.

Sql запрос к бд:
Delphi
1
2
3
4
5
6
qrGridSearch.Active:=false;
qrGridSearch.SQL.Clear;
qrGridSearch.SQL.Add('SELECT Devices.Dev_Name, Folders.Folder_Name, Subfolders.Subfolder_Name, Archive.Invent_Num, Archive.Draw_Num, Archive.Draw_Name, Archive.Developer, Archive.Place');
qrGridSearch.SQL.Add('FROM ((Archive LEFT JOIN Devices ON Archive.Device = Devices.id) LEFT JOIN Folders ON Archive.Folder_Num = Folders.ID) LEFT JOIN Subfolders ON Archive.Subfolder_Num = Subfolders.ID');
qrGridSearch.SQL.Add('WHERE (((Archive.Invent_Num) like '+#39+'%'+Edit1.Text+'%'+#39'))' + ' AND ' +'(((Archive.Draw_Num) like '+#39+'%'+Edit2.Text+'%'+#39'))' + ' AND '+ '(((Archive.Draw_Name) like '+#39+'%'+Edit3.Text+'%'+#39'))' +' AND '+ '(((Archive.Developer) like '+#39+'%'+Edit4.Text+'%'+#39'))' +' AND '+ '(((Archive.Place) like '+#39+'%'+Edit5.Text+'%'+#39+'));');
qrGridSearch.Open;
В Access SQL запрос: where ((Archive.Draw_Name) like '*изысканий*'); работает без нареканий.
В Delphi SQL запрос, а именно часть: '(((Archive.Draw_Name) like '+#39+'%'+Edit3.Text+'%'+#39'))' выбирает 4 строки из более чем сотни реально существующих записей.
Работает странно именно с последними записями в MS Access. Я может чего не понимаю и записи в базе данных после 100к начинают как то иначе фильтроваться?
На скрине вывел ListBox что бы показать что пишется в запросе через ADOQuery
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2018, 08:04
Ответы с готовыми решениями:

Delphi и Access фильтрация
Связал Delphi с БД Access, необходимо провести фильтрацию, в данном случае по марке Поле с маркой - ComboBox, пользователь выбирает там...

Delphi + Access Фильтрация по дате
Здравствуйте дорогие эксперты! У меня такая проблема.. есть база даннах написанная на access .Подключаюсь к ней через delphi 7. ...

Delphi+SQL+Access фильтрация данных
Добрый день. Помогите пожалуйста. Есть таблица: Дата Контрагент Начислено НДФЛ Касса Продукция Необходимо вначале выбрать все строки...

12
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
03.04.2018, 08:07
и в аксессе у вас тоже в условии везде стоит AND?
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 49
03.04.2018, 08:36  [ТС]
qwertehok, нет, sql запрос чисто под делфи
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 49
03.04.2018, 08:37  [ТС]
Забыл скрин выложить)
Миниатюры
Delphi, MS Access,  фильтрация по бд  
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
03.04.2018, 08:40
Цитата Сообщение от Makxak Посмотреть сообщение
нет, sql запрос чисто под делфи
повторюсь

Цитата Сообщение от Makxak Посмотреть сообщение
WHERE (((Archive.Invent_Num) like '+#39+'%'+Edit1.Text+'%'+#39'))' + ' AND ' +'(((Archive.Draw_Num) like '+#39+'%'+Edit2.Text+'%'+#39'))' + ' AND '+ '(((Archive.Draw_Name) like '+#39+'%'+Edit3.Text+'%'+#39'))' +' AND '+ '(((Archive.Developer) like '+#39+'%'+Edit4.Text+'%'+#39'))' +' AND '+ '(((Archive.Place) like '+#39+'%'+Edit5.Text+'%'+#39+'));');
эта строка и в делфи и в аксессе одинаковая?
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 49
03.04.2018, 09:32  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
эта строка и в делфи и в аксессе одинаковая?
Эта строка только в делфи, в access вообще не пользовался запросом, т.к. там по другому пишется
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
03.04.2018, 09:42
ты должен сначала запрос протестировать в аксессе и только потом его вставлять в делфи, заменив значения переменными
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 49
03.04.2018, 09:45  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
ты должен сначала запрос протестировать в аксессе и только потом его вставлять в делфи, заменив значения переменными
Спасибо за совет. Я уже написал что программа уже год как работает прекрасно, но сейчас начал поиск так глючить и я нее знаю к чему это привязать.
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
03.04.2018, 10:04
Цитата Сообщение от Makxak Посмотреть сообщение
начал поиск так глючить
это не поиск глючит, это у тебя запрос кривой

не делают так что бы в запросе было 100500 полей и like
если ты не знаешь какие поля будут использоваться в запросе, то надо собирать запрос из кусочков
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 49
03.04.2018, 10:14  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
то надо собирать запрос из кусочков
По вашему лучше было бы собирать запрос из условий, если используется те поля то такой запрос, если другие то сякой. Или как по вашему лучше было бы построить запрос
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
03.04.2018, 10:32
построить запрос и сформировать строку запроса это разные вещи
сам запрос тестируется в аксесса так что бы все работало, потом его утаскиваем и делфи и там с ним работаем
НО в некоторых случаях не все колонки нужны и тогда мы начинаем делить запрос на части
Delphi
1
2
3
4
5
6
var
SQL, select, from,where:string
select:='';
from:='';
where:='';
sql:=select+from+where;
PS я почему то верю что запрос с кучей like будет не оптимальный
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 49
03.04.2018, 11:43  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
PS я почему то верю что запрос с кучей like будет не оптимальный
Не знаю как реагировать, но в общем, проблема была в запросе, но всё же была странная.
В запросе используется отбор по 5-ти столбцам, и если убрать запрос со столбца "Invent_Num" всё работает идеально, но я подумал что при запросе от 5-ти и выше такой глюк возникает, попробовал перенести запрос с любого столбца на этот столбец, то проблема вернулась.
Миниатюры
Delphi, MS Access,  фильтрация по бд   Delphi, MS Access,  фильтрация по бд   Delphi, MS Access,  фильтрация по бд  

Delphi, MS Access,  фильтрация по бд   Delphi, MS Access,  фильтрация по бд  
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
03.04.2018, 11:46
если проблема в аксессе, то задавай свой вопрос в ветке по аксессу - https://www.cyberforum.ru/ms-access/
делфи тут не при чем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2018, 11:46
Помогаю со студенческими работами здесь

Фильтрация в MS Access
Доброго времени суток, друзья! С Access раньше не работал вообще и взялся по просьбе знакомой. Задача: на форме есть поле для ввода года...

Фильтрация в access!
Нужна помощь, не могу разобраться с фильтрацией, есть поле по которой нужно фильтровать базу, и в этом поле может быть сразу несколько...

Фильтрация данных БД Access
Ситуация следующая: Есть форма 1.jpg Для вывода использую такой код Dim a1, v1, c1, d1 As String a1 =...

Фильтрация данных из БД Access
Помогите пожалуйста с поиском и выводом данных в поле поиска вводим пин-код и вывести нужную строку с данными

Фильтрация данных в Access
Здравствуйте. Столкнулся с такой проблемой: работаю в Дримвивере, поэтому в коде не шибко разбираюсь. Есть БД Акцесс. Допустим, есть три...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru