Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
MS Access

Поиск по базе данных

18.01.2013, 16:07. Показов 5079. Ответов 52
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте товарищи. Нужна ваша помощь. Есть база данных сделанная в акцес там примерно 20 таблиц. В делфи мне нужно сделать поиск по всем таблицам. тоесть например у меня есть в таблицах одно и то же поле "год" вот мне надо что бы к примеру вводим год и из всех таблиц показывался только этот год. т.е из разных таблиц делался отбор только по конкретному году.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2013, 16:07
Ответы с готовыми решениями:

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

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

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

52
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
18.01.2013, 16:30
Воспользуйтесь компонентом TADOQuery и сформируйте запрос типа
SQL Скопировано
1
2
3
SELECT fieldyear
FROM table1,table2,table3...
WHERE fieldyear='2013'
0
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
18.01.2013, 16:42  [ТС]
Можно исходник?

Добавлено через 4 минуты
да и поиск необязательно по дате может по названию и т.п
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
18.01.2013, 17:42
Цитата Сообщение от Arxangel2 Посмотреть сообщение
Можно исходник?
Дык у меня-то откуда исходник? Это у вас база с 20 таблицами. Или вы имеет ввиду код? Так я не знаю не таблиц, не названий полей. А в чем, собственно, трудности? Ни разу не оформляли SQl-запрос в Дельфи?
0
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
18.01.2013, 18:08  [ТС]
SELECT fieldyear и какое название таблицы мне сдесь указывать тот в котором будет происходить поиск???

Добавлено через 15 минут
и мне надо что бы пользователь сам указывал какой год ему нужно найти
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
18.01.2013, 19:29
Цитата Сообщение от Arxangel2 Посмотреть сообщение
SELECT fieldyear и какое название таблицы мне сдесь указывать тот в котором будет происходить поиск???

Добавлено через 15 минут
и мне надо что бы пользователь сам указывал какой год ему нужно найти
1. Указываете все таблицы через запятую. У вас же 20 таблиц содержат поле с годом? Вот все и перечисляете.
2. Данные о годе заносите в переменную и подставляете в запрос.
SQL Скопировано
1
2
3
SELECT fieldyear
FROM table1,table2,table3...
WHERE fieldyear=yearvalue
Скиньте базу в Access, чтобы я смог точно сформулировать вам SQL-запрос.
0
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
18.01.2013, 19:39  [ТС]
а в селекте что нужно писать я никак непойму

Добавлено через 5 минут
и как сделать так что бы пользователь сам писал год для поиска
Pascal Скопировано
1
'WHERE Название Like "'+LabeledEdit1.Text+'%";')
Вот так вот надо писать что бы сделать что бы пользователь сам вводил данные для поиска?
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
18.01.2013, 20:19
Цитата Сообщение от Arxangel2 Посмотреть сообщение
а в селекте что нужно писать я никак непойму

Добавлено через 5 минут
и как сделать так что бы пользователь сам писал год для поиска
Pascal Скопировано
1
'WHERE Название Like "'+LabeledEdit1.Text+'%";')
Вот так вот надо писать что бы сделать что бы пользователь сам вводил данные для поиска?
1. В селекте пишете поле, которое ищете в таблицах. В предыдущем вопросе я немного поторопился и обозначил "схему" запроса. Лучше всего объяснить на конкретном примере. Раз уж вы базой не делитесь, то приведу абстрактный пример, а вы воспользуйтесь воображением. :-)

Например, у меня в базе две таблицы table1 и table2, в которых содержится поле с одинаковым названием fieldyear. Мне нужно вывести поля ID1 и ID2 из этих таблиц соответственно, в записях (строках) которых в поле fieldyear содержится значение '2013'. Пишем запрос:
SQL Скопировано
1
2
3
4
SELECT table1.ID1,table2.ID2
FROM table1,table2
WHERE table1.fieldyear LIKE 2013
AND table2.fieldyear LIKE 2013
Если захотите вывести все поля, то пишите
SQL Скопировано
1
2
3
4
SELECT *
FROM table1,table2
WHERE table1.fieldyear LIKE 2013
AND table2.fieldyear LIKE 2013
2. Да, с переменной пользователя похоже на правду.
0
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
18.01.2013, 20:27  [ТС]
мне надо сделать этот поиск в 37 форме спасибо заранее)
Сделай поиск по 3 таблица Электрогитары,Бас гитары и акустические гитары
http://files.mail.ru/780468FA0... CF4523E0A8

Добавлено через 16 секунд
по дате)
Спасибо за ранее
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
19.01.2013, 07:59
Цитата Сообщение от Arxangel2 Посмотреть сообщение
Сделай поиск по 3 таблица Электрогитары,Бас гитары и акустические гитары
по дате)
Все, дошло, что нужно сделать. Сорри, что-то я изначально затупил.
Тут есть несколько проблем.

Проблема №1. Названия полей таблицы с пробелами.
Нельзя написать
SQL Скопировано
1
2
3
SELECT Название
FROM АкустическиеГитары
WHERE Год выпуска=2005
т.к. получим ошибку синтаксиса (пропущен оператор) в выражении запроса 'Год выпуска=2005'.
Правильно писать так
SQL Скопировано
1
2
3
SELECT Название
FROM АкустическиеГитары
WHERE [Год выпуска]=2005
Если не являетесь гуру SQL-запросов, то всегда проверяйте их перед тем, как добавлять в код программы. MS Access располагает всеми необходимыми инструментами.

С остальными проблемами разберемся чуть позже. :-)

Добавлено через 21 минуту
Проблема №2. Нужно объединить результаты запросов в одну таблицу. Мой пример выше некорректен для вашей задачи, т.к. выполняет так называемое "декартово произведение" результатов запроса. При этом, поля с названием не объединяются в одно поле. Очевидно, что надо использовать запрос на объединение. Для вашего случая SQL-запрос должен выглядеть следующим образом:
SQL Скопировано
1
2
3
4
5
6
7
8
9
10
11
SELECT Название
FROM АкустическиеГитары
WHERE [Год выпуска]=2005
UNION
SELECT Название
FROM Электрогитары
WHERE [Год выпуска]=2005
UNION
SELECT Название
FROM БасГитары
WHERE [Год выпуска]=2005
В результате получим названия гитар, выпущенных в 2005 году.
С остальным, я думаю, проблем у вас не возникнет.
1
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
19.01.2013, 12:21  [ТС]
так спасибо. Но как сделать что бы я не сразу указывал какой год а пользователь указывал какой ему нужно
0
Эксперт Pascal/Delphi
 Аватар для droider
4925 / 2792 / 856
Регистрация: 04.10.2012
Сообщений: 10,175
19.01.2013, 13:16
Arxangel2, все элементарно. Если пользователь вводит год в текстовое поле, то просто пропишите это поле в запросе вместо заранее указанного года.
0
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
19.01.2013, 13:47  [ТС]
я конечно извеняюсь но можно всё таки пример.... а меня ничё не получается
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
19.01.2013, 14:12
Переменную yearvalue определяете, например, так:
Delphi Скопировано
1
yearvalue:=Edit1.Text;
Дальше пишем запрос:
Delphi Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
with ADOQuery1 do
       begin
         Close;
         SQL.Clear;
         SQL.Add('SELECT Название');
         SQL.Add('FROM АкустическиеГитары');
         SQL.Add('WHERE [Год выпуска]='"yearvalue"'');
         SQL.Add('UNION');
         SQL.Add('SELECT Название');
         SQL.Add('FROM Электрогитары');
         SQL.Add('WHERE [Год выпуска]='"yearvalue"'');
         SQL.Add('UNION');
         SQL.Add('SELECT Название');
         SQL.Add('FROM БасГитары');
         SQL.Add('WHERE [Год выпуска]='"yearvalue"'');
         Open;
       end;
0
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
19.01.2013, 15:39  [ТС]
Delphi Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm37.Button1Click(Sender: TObject);
begin
yearvalue:=LabeledEdit1.Text;
with ADOQuery1 do
       begin
         Close;
         SQL.Clear;
         SQL.Add('SELECT Название');
         SQL.Add('FROM АкустическиеГитары');
         SQL.Add('WHERE [Год выпуска]=yearvalue');
         SQL.Add('UNION');
         SQL.Add('SELECT Название');
         SQL.Add('FROM Электрогитары');
         SQL.Add('WHERE [Год выпуска]=yearvalue');
         SQL.Add('UNION');
         SQL.Add('SELECT Название');
         SQL.Add('FROM БасГитары');
         SQL.Add('WHERE [Год выпуска]=yearvalue');
         Open;
       end;
     end;
 
 
end.
Компайлится но не работает в чём проблема???? пишет yearvalue не имеет значения по умолчанию
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
19.01.2013, 16:23
сравните мой код и свой. Думаете, я там кучу кавычек понаставил просто потому, что мне так нравится?
0
2 / 2 / 1
Регистрация: 26.09.2012
Сообщений: 201
19.01.2013, 16:34  [ТС]
если поставить всю эту кучу кавычек то он даже не компайлится

Добавлено через 38 секунд
[Error] Unit37.pas(42): Illegal character in input file: '"' ($22)

Добавлено через 10 секунд
[Error] Unit37.pas(42): Missing operator or semicolon

Добавлено через 21 секунду
[Error] Unit37.pas(46): Illegal character in input file: '"' ($22)
[Error] Unit37.pas(50): Illegal character in input file: '"' ($22)
0
Эксперт Pascal/Delphi
 Аватар для droider
4925 / 2792 / 856
Регистрация: 04.10.2012
Сообщений: 10,175
19.01.2013, 16:38
Arxangel2, обычные двойные кавычки не нужны. Ставьте апострофы (одинарные кавычки). Двойные здесь не используйте! Компилятор "требует" от Вас ставить апострофы!
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 501
19.01.2013, 16:40
Что-то опять я намудрил с кавычками. Вот так будет корректно
Delphi Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
with ADOQuery1 do
       begin
         Close;
         SQL.Clear;
         SQL.Add('SELECT Название');
         SQL.Add('FROM АкустическиеГитары');
         SQL.Add('WHERE [Год выпуска]='+QuotedStr(yearvalue)+'');
         SQL.Add('UNION');
         SQL.Add('SELECT Название');
         SQL.Add('FROM Электрогитары');
         SQL.Add('WHERE [Год выпуска]='+QuotedStr(yearvalue)+'');
         SQL.Add('UNION');
         SQL.Add('SELECT Название');
         SQL.Add('FROM БасГитары');
         SQL.Add('WHERE [Год выпуска]='+QuotedStr(yearvalue)+'');
         Open;
       end;
0
Эксперт Pascal/Delphi
 Аватар для droider
4925 / 2792 / 856
Регистрация: 04.10.2012
Сообщений: 10,175
19.01.2013, 16:41
используйте функцию QuotedStr в конце концов

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

Поиск в базе данных
К программе подключен sql запрос: SELECT prixod.Data, prixod.Vremya, obekti_ycheta.Naimenovanie, tipi_obektov.Nazvanie,...

Поиск по базе данных
Помогите, пожалуйста, организовать поиск по базе данных. Ошибки не нахожу, поиск должен осуществляться при помощи Edit. procedure...

Поиск по Базе данных
У меня есть база данных хочу сделать поиск по ФИО не понимаю как скрин приложу

Поиск в Базе Данных
Как сделать поиск в Delphi 7? Я использую DBGrid

Поиск по базе данных
Как сделать поиск по базе данных, подскажите пожалуйста? например: дана таблица с столбцами:№,тип мото, название мото, цена мото,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер