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

Поиск по двум таблицам с одинаковыми полями через ADOQuery

14.03.2018, 20:44. Показов 1463. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На данный момент есть база данных Access, в ней - две таблицы (Table1, Table2), в каждой из них есть одинаковые поля - "IMEI" и "ФИО".
По-первой таблице уже написан фильтр, который отлично работает.

Фильтрация происходит по полю - Edit1.
Delphi
1
2
3
4
5
6
7
8
9
10
begin
if Length(Edit1.Text) > 0 then
begin
ADOQuery1.Filtered:=false;
ADOQuery1.Filter:='IMEI LIKE ' + #39 + Edit1.Text + '%' + #39;
ADOQuery1.Filtered:=true;
end
else
ADOQuery1.Filtered:=false;
end;
Как можно усовершенствовать данный фильтр (возможно связать таблицы), чтобы он работал на две таблицы?

Подключение первой таблицы происходит через DBGrid -> DataSource -> ADOQuery -> TADOConnect.
Вторую таблицу пробовал подключать через ADOTable и ADOQuery.
Так же пробовал объединять их через MYSQL запрос (JOIN), получил кучу ошибок. Работаю в Delphi 10.1 Если можно поподробней, я - новичек.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2018, 20:44
Ответы с готовыми решениями:

Поиск по двум таблицам
Здравствуйте, очень нужна ваша помощь. У меня проблема с поиском по двум таблицам. Дело в том, что сам поиск работает, но почему-то не...

Поиск по двум таблицам
В общем, есть 2 таблицы - Authors и Books, для простоты скажем, что у обеих есть поля ID (bigint), Name и Genre (nchar(50)). Мне нужно...

Поиск по двум таблицам
Как произвести поиск по двум таблицам, которые не связанны между собой. Формулировка запроса: Вывести название определенных лекарств. У...

9
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,154
Записей в блоге: 3
14.03.2018, 20:50
Цитата Сообщение от Buyniti Посмотреть сообщение
в каждой из них есть одинаковые поля - "IMEI" и "ФИО".
а зачем дублировать поля?

Цитата Сообщение от Buyniti Посмотреть сообщение
Как можно усовершенствовать данный фильтр (возможно связать таблицы), чтобы он работал на две таблицы?
что значит на две? что бы фильтровал в двух таблицах сразу?
ну так допиши ADOQuery2 в свое событие и все

Рекомендую все таки научиться использовать SQL запросы
1
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 8
14.03.2018, 20:57  [ТС]
Таблицы разные, но эти два поля в них повторяются. Поиск на данных момент происходит по основной таблице (Table1). Нужно чтобы по двум полям "IMEI" и "ФИО" тоже происходил поиск Table2 а весь результат отображался в первом Grid'е (т.е. в первой таблице).
Как хотя бы примерно должно выглядеть событие?
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
14.03.2018, 22:08
SQL запросы это крайне простая вещь. там всего четыре команды.
прочтите хотя бы основы, там страниц 10 от силы вместе с примерами
если вы применяете Query то там внутри SQL. Тогда как вы можете не знать, что условие ставится прямо в запрос?
И никакие фильтры не нужны.

Если у вас в двух таблицах поля ФИО, то налицо неправильная архитектура БД.
В реляционных БД сущности обычно хранятся только в одной таблице, остальные только ссылаются на эту таблицу-справочник по ключевому полю или набору полей.

Ну и в конце концов, что помешало вам
Delphi
1
2
3
4
5
6
ADOQuery1.Filtered:=false;
ADOQuery1.Filter:='IMEI LIKE ' + #39 + Edit1.Text + '%' + #39;
ADOQuery1.Filtered:=true;
ADOQuery2.Filtered:=false;
ADOQuery2.Filter:='IMEI LIKE ' + #39 + Edit1.Text + '%' + #39;
ADOQuery2.Filtered:=true;
??
0
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 8
15.03.2018, 07:40  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
Если у вас в двух таблицах поля ФИО, то налицо неправильная архитектура БД.
В реляционных БД сущности обычно хранятся только в одной таблице, остальные только ссылаются на эту таблицу-справочник по ключевому полю или набору полей.
Ну и в конце концов, что помешало вам
Мне обязательно нужно проверить на предмет совпадения данные из двух таблиц поля - 'IMEI' и 'ФИО' путем фильтрации через Edit1, все данные должны отображаться в первой таблице (Table1). Т.Е. нужно связать или сделать 'слияние' двух таблиц на момент фильтрации и вывести сообщение если эти данные уже есть в таблице(не важно что они физически могут повторяются, нужно просто знать что они есть, т.е. просто вывести сообщение). Именно связать эти две таблицы во время фильтрации не получается.

Пробовал использовать JOIN для объединения, но результатов это не дало.
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,154
Записей в блоге: 3
15.03.2018, 07:56
Цитата Сообщение от Buyniti Посмотреть сообщение
Пробовал использовать JOIN для объединения, но результатов это не дало.
попробовал увидеть как вы это делаете и не получилось

напишите код или ждите мой хрустальный шар из ремонта
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
15.03.2018, 07:58

у вас случайно нет мыслей, что никто, кроме вас, не знает, как устроены ваши таблицы ?
чем вам помочь?
ссылку на учебник SQL дать?
0
694 / 6956 / 265
Регистрация: 11.08.2016
Сообщений: 3,934
15.03.2018, 13:55
Фильтр на две таблицы не рассчитан. Пользуйтесь Query.
0
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 8
15.03.2018, 15:15  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
попробовал увидеть как вы это делаете и не получилось
напишите код или ждите мой хрустальный шар из ремонта
FROM Table1 INNER JOIN Table2 ON Table1.Field6 = Table2.Field5 (6 и 5 поле в обоих таблицах - IMEI, не совсем понял что нужно писать им в parameter - value ) код писал в свойства ADOQuery первой таблицы.

Таблицы находятся на двух разных формах.
подключаются так:
DBGrid1 -> DataSource1 -> ADOQuery1 -> TADOConnect.
DBGrid2 -> DataSource2 -> ADOTable1-> TADOConnect. (в свойства ADOTable1 указывал связь IMEI с IMEI)
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,154
Записей в блоге: 3
15.03.2018, 15:22
Цитата Сообщение от Buyniti Посмотреть сообщение
FROM Table1 INNER JOIN Table2 ON Table1.Field6 = Table2.Field5
что это?
в запрос нужно писать имена таблиц в СУБД, какие Table и Field?

почитайте про запросы или делайте как написал krapotkin в #4
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2018, 15:22
Помогаю со студенческими работами здесь

Как сделать поиск по двум таблицам?
Доброго времени суток. Может кто подсказать, что не так в запросе: SELECT b.id, b.name, b.author, b.publishing, b.year, c.name AS c_name...

Как сделать запрос к двум таблицам и вывести через цикл?
Добрый вечер! Нужна помощь, совсем запутался. Есть первая таблица(table1),в которой строки принадлежат непосредственно к каждому...

Поиск по двум таблицам: ошибка "ambiguous column name"
Хочу организовать поиск с обоих таблиц. С одной работает с двумя ошибка: "ambiguous column name" ...

Поиск через adoquery
Всем привет! Не могу разобраться с проблемой: with ADOQuery1 do begin Close; SQL.Clear; SQL.Add('SELECT * FROM Progr WHERE...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru