Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 3
Регистрация: 02.11.2013
Сообщений: 89
1

Поиск по параметру во всех полях таблицы

27.01.2024, 23:51. Показов 1581. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Не правильно работает запрос.

В таблице Table1 имеются поля Pole1, Pole2, Pole3, Pole4
нужно через параметр искать информацию во всех полях таблицы.

SQL
1
 SELECT * FROM Table1 WHERE (Pole1 LIKE :param) OR (Pole2 LIKE :param) OR (Pole3 LIKE :param) OR (Pole4 LIKE :param);
Некорректно работает. Или частично выбирает или вообще ничего.
Как правильно написать чтобы искал во всех полях таблицы?

ЗЫ Название таблицы и полей это просто для примера.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2024, 23:51
Ответы с готовыми решениями:

Поиск по сайту не ищет по всех полях
Всем привет. Надеюсь хоть с поиском мне смогут тут помочь. У меня стоит Adsmanager 3.14. В нем я...

Поиск в разных полях таблицы (запроса) по одному полю формы
Доброго времени суток! Есть таблица Работы в которой поля: Место, Тема и Название. Нужно...

Массосо Изменить значение таблицы поиск по одному параметру изменение другого
Здравствуйте друзья, я аутист программирования. В базе есть строка с 9 значениями мне нужно сделать...

Сделать запрос, показывающий информацию о всех полях для всех таблиц для заданной базы данных
Здравствуйте. Задали домашку, но занятие было давно и я уже что-то не улавливаю смысл самого...

23
Эксперт MS Access
17534 / 7286 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
28.01.2024, 03:53 2
А так
SQL
1
2
3
4
PARAMETERS param Text;
SELECT *
FROM Table1
WHERE Pole1 LIKE param OR Pole2  LIKE param OR Pole3 LIKE param OR Pole4 LIKE param
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
28.01.2024, 04:00 3
Цитата Сообщение от SergejFil Посмотреть сообщение
чтобы искал во всех полях таблицы?
Как идея:
А разве не оптимальнее искать сразу по объединённому значению полей?
SQL
1
2
3
PARAMETERS param text (50);
SELECT * FROM Table1
WHERE ((Pole1 & " " & Pole2 & " " & Pole3 & " " & Pole4) LIKE "*" & param & "*");
0
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
28.01.2024, 11:31 4
А чем,в принципе, отличаются однотипные поля Pole1..PoleN и насколько таблица соответствует нормальным формам (хотя не зная задач решаемых БД о чем либо судить не возможно)
0
1 / 1 / 3
Регистрация: 02.11.2013
Сообщений: 89
28.01.2024, 12:27  [ТС] 5
Sorry, описал проблему неполно.
Оригинальная таблица содержит примерно 20 тыс. записей и 12 полей. Поля разнотипные. Текстовые, числовые, дата/время.
Запрос вызывается из RadStudio (c++) , там свой метод вызова параметра запроса

поэтому строка запроса
SQL
1
 PARAMETERS param text (50);
не нужна.

Смысл в том что пользователь ищет в таблице какую то информацию вводя ее в текстовое поле (параметр запроса).
Соответственно запрос должен срабатывать и выбирать искомое из любого поля таблицы.

Вот пример такого запроса

SQL
1
2
3
   qFinanz->SQL->ADD(" select * from HomF where (Pic_st Like :ttt) or (Sl_kdd Like :ttt) or (Idd_kat Like :ttt) or (Kdd Like :ttt) or (Date_o Like :ttt) or (Date_id Like :ttt) or (Chet Like :ttt) or (Klient Like :ttt) or (Mem Like :ttt) or (Gruppa_St Like :ttt) or (Rashod Like :ttt) or (Prihod Like :ttt) or (Stat Like :ttt) order by Date_o desc;");
           frmA_Start->qFinanz->Parameters->ParamByName("ttt")->VALUE = ("%" + txtFind->Text + "%") ; //так вызывается параметр
           qFinanz->OPEN();

Мне нужно тело самого запроса правильно составить. Человек который писал этот проект уволился. Приходится разбираться в чужом коде.
Проект заточен на базу Access поэому написал в эту ветку форума
0
Эксперт MS Access
17534 / 7286 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
28.01.2024, 12:54 6
Цитата Сообщение от SergejFil Посмотреть сообщение
Sorry, описал проблему неполно.
Вы получили ответы на Ваш начальный вопрос (да/нет). Что положено сделать вежливому человеку. А с вопросами по C++ - создавайте тему в соответствующем разделе и там спрашивайте ... .
0
1 / 1 / 3
Регистрация: 02.11.2013
Сообщений: 89
28.01.2024, 12:59  [ТС] 7
Тема закрыта.
Хотя ответ не получил
0
Эксперт MS Access
17534 / 7286 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
28.01.2024, 13:05 8
Цитата Сообщение от SergejFil Посмотреть сообщение
Хотя ответ не получил
Врать не хорошо, оба ответа в Аксеес прекрасно работают (с пустыми полями и т.п.). Идите в игнор ... .
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
28.01.2024, 13:19 9
Лучший ответ Сообщение было отмечено SergejFil как решение

Решение

Цитата Сообщение от SergejFil Посмотреть сообщение
Мне нужно тело самого запроса правильно составить.
На самом тело вашего запроса есть такой:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT * FROM HomF WHERE
   (Pic_st LIKE :ttt) 
   OR (Sl_kdd LIKE :ttt) 
   OR (Idd_kat LIKE :ttt) 
   OR (Kdd LIKE :ttt) 
   OR (Date_o LIKE :ttt) 
   OR (Date_id LIKE :ttt) 
   OR (Chet LIKE :ttt) 
   OR (Klient LIKE :ttt) 
   OR (Mem LIKE :ttt) 
   OR (Gruppa_St LIKE :ttt) 
   OR (Rashod LIKE :ttt) 
   OR (Prihod LIKE :ttt) 
   OR (Stat LIKE :ttt) 
ORDER BY Date_o DESC;
А вот аналогичный запрос к таблице MS Access в его же среде:
SQL
1
2
3
4
5
SELECT * FROM TableTest WHERE 
    (RecID LIKE ttt) 
    OR (TextField01 LIKE ttt) 
    OR (DateTime01 LIKE ttt)
ORDER BY DateTime01 DESC;
Видите разницу?
... Нет двоеточия перед ссылкой на параметр
Параметр вы обрамляете знаком процента: ParamByName("ttt")->VALUE = ("%" + txtFind->Text + "%")
, а среде MSA для "любые символы" используется "звёздочка": "*", и что бы не набивать её (их) каждый раз я бы написал так:
SQL
1
2
3
4
5
SELECT * FROM TableTest WHERE 
    (RecID LIKE "*" & ttt & "*") 
    OR (TextField01 LIKE "*" & ttt & "*") 
    OR (DateTime01 LIKE "*" & ttt & "*")
ORDER BY DateTime01 DESC;
Всё.
Успехов!
1
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
28.01.2024, 14:02 10
Цитата Сообщение от SergejFil Посмотреть сообщение
..Текстовые, числовые, дата/время...
Ну и как Вы представляете себе поиск в числовом(допустим) поле текста (или наоборот)
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
28.01.2024, 14:12 11
Цитата Сообщение от SDKU Посмотреть сообщение
Ну и как Вы представляете себе поиск в числовом(допустим) поле текста (или наоборот)
Числовое поле проигноририруется - в текстовом найдёт и наоборот (если в тексте нет заданного числа).
И что тут представлять?
0
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
28.01.2024, 15:19 12
Цитата Сообщение от Eugene-LS Посмотреть сообщение
..Числовое поле проигноририруется...
Не проигнорируется...
Миниатюры
Поиск по параметру во всех полях таблицы  
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
28.01.2024, 15:34 13
Цитата Сообщение от SDKU Посмотреть сообщение
Не проигнорируется...
Поэкспериментируйте у себя:
SQL
1
2
3
SELECT Id, [Name] FROM MSysObjects WHERE (([Id] LIKE "*" & [ttt] & "*") 
OR ([Name] LIKE "*" & [ttt] & "*") 
OR ([Name] LIKE "*odule*"));
0
1 / 1 / 3
Регистрация: 02.11.2013
Сообщений: 89
28.01.2024, 17:05  [ТС] 14
Спасибо Eugene-LS !
Действительно причина была в символе процента.Заменил звездочками и все заработало.
К сожалению на домашнем компе у меня нет Access чтобы можно было протестировать в его среде. Да это теперь и не важно.
Жму кнопку СПАСИБО!

PS.Двоеточие в параметрическом запросе должно быть. RadStudio при обращении к базе Access определяет что это параметр.
Поэтому такая строка в запросе например
SQL
1
 PARAMETERS ttt text (50);
- не используется.

Добавлено через 12 минут
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Врать не хорошо, оба ответа в Аксеес прекрасно работают (с пустыми полями и т.п.). Идите в игнор ... .
ltv_1953 - в чем дело?

у меня была проблема, я обратился на форум. Пробовал ваш вариант. У меня не работало, так как причина была не в запросе, а в инициалицации параметра запроса.Я об этом не знал. Так как на домашнем компе нет MS Access, то я не мог протестировать в его среде. Компетентные люди помогли. Проблема решена.

Так что врете вы, "вежливый вы наш"...
0
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
28.01.2024, 20:46 15
Цитата Сообщение от Eugene-LS Посмотреть сообщение
SELECT Id, [Name] FROM MSysObjects WHERE (([Id] LIKE "*" & [ttt] & "*")
А при чем здесь системная таблица с полем [ttt]
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
28.01.2024, 20:55 16
SDKU
And silence that speaks so much louder that words,
Of promises broken.
------------------------------
Pink Floyd - "Sorrow"
... я про пост с чудным номером #13
Ну и ... ???

Добавлено через 2 минуты
Цитата Сообщение от SDKU Посмотреть сообщение
А при чем здесь системная таблица с полем [ttt]
01. Ну во первых там нет такого поля - это параметр (наберите "4" или "epor") - увидите всё.
02. Использовал системную таблицу т.к. она есть у всех.
0
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
29.01.2024, 00:08 17
Если не затруднит поясните:в MSysObjects про TableTest одна запись\строка. Параметр будет запрошен. В выборке должно быть несколько (допустим 5 записей)-какие записи и откуда отбираются?
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
29.01.2024, 00:22 18
Цитата Сообщение от SDKU Посмотреть сообщение
Если не затруднит поясните
Не понял вашего вопроса целиком.
Видимо это такой способ уйти от признания "неправоты".

Если это не так - Создайте запрос:
SQL
1
SELECT * FROM MSysObjects;
Будет (надеюсь) понятно: "откуда отбираются?".
0
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
29.01.2024, 02:18 19
Цитата Сообщение от SDKU Посмотреть сообщение
в MSysObjects про TableTest одна запись\строка.
Так откуда возьмется набор записей?. Текст запроса:
SQL
1
2
3
SELECT Id, [Name] FROM MSysObjects WHERE (([Id] LIKE "*" & [ttt] & "*") 
OR ([Name] LIKE "*" & [ttt] & "*") 
OR ([Name] LIKE "*odule*"));
и результат:
Миниатюры
Поиск по параметру во всех полях таблицы  
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
29.01.2024, 04:04 20
Цитата Сообщение от SDKU Посмотреть сообщение
и результат:
у меня тот же запрос (post#19) с параметром: [ttt] = "4" - показал такое "кино":
Поиск по параметру во всех полях таблицы

База для тестов моих бредовых идей - "грязненькая".
....
И "кино" получилось чётко согласно заданным условиям отбора.
0
29.01.2024, 04:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2024, 04:04
Помогаю со студенческими работами здесь

Поиск всех таблицы в БД, которые содержат определенную колонку
Добрый день! Собственно, необходимо поменять нумерацию в колонке, а вот в какой именно таблице...

Суммирование по параметру из другой таблицы
Доброго времени суток. Столкнулся с проблемой, на разрешение которой собственных знаний в Excel не...

Кодировка UTF-8 в полях таблицы
Какой тип необходимо использовать при созадании таблицы, если данные водятся в кодировке UTF-8?

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

Поиск в вычисляемых полях
Всем привет!!! Собственно вопрос такой: как осуществить поиск в вычисляемых полях? А теперь...

Изменить значение в столбце во всех полях
Всем привет. Есть такая таблица: id | pl 1 |<iframe width="100%"...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru