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

На данный момент есть база данных Access, в ней - две таблицы (Table1, Table2), в каждой из них есть одинаковые поля - "IMEI" и "ФИО". По-первой таблице уже написан фильтр, который отлично работает.Фильтрация происходит по полю - Edit1.
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 Если можно поподробней, я - новичек.
9 ответов

в каждой из них есть одинаковые поля - "IMEI" и "ФИО".
а зачем дублировать поля?
Как можно усовершенствовать данный фильтр (возможно связать таблицы), чтобы он работал на две таблицы?
что значит на две? что бы фильтровал в двух таблицах сразу? ну так допиши ADOQuery2 в свое событие и всеРекомендую все таки научиться использовать SQL запросы


Таблицы разные, но эти два поля в них повторяются. Поиск на данных момент происходит по основной таблице (Table1). Нужно чтобы по двум полям "IMEI" и "ФИО" тоже происходил поиск Table2 а весь результат отображался в первом Grid'е (т.е. в первой таблице). Как хотя бы примерно должно выглядеть событие?


SQL запросы это крайне простая вещь. там всего четыре команды. прочтите хотя бы основы, там страниц 10 от силы вместе с примерами если вы применяете Query то там внутри SQL. Тогда как вы можете не знать, что условие ставится прямо в запрос? И никакие фильтры не нужны.Если у вас в двух таблицах поля ФИО, то налицо неправильная архитектура БД. В реляционных БД сущности обычно хранятся только в одной таблице, остальные только ссылаются на эту таблицу-справочник по ключевому полю или набору полей.Ну и в конце концов, что помешало вам
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;
??


Если у вас в двух таблицах поля ФИО, то налицо неправильная архитектура БД. В реляционных БД сущности обычно хранятся только в одной таблице, остальные только ссылаются на эту таблицу-справочник по ключевому полю или набору полей. Ну и в конце концов, что помешало вам
Мне обязательно нужно проверить на предмет совпадения данные из двух таблиц поля - 'IMEI' и 'ФИО' путем фильтрации через Edit1, все данные должны отображаться в первой таблице (Table1). Т.Е. нужно связать или сделать 'слияние' двух таблиц на момент фильтрации и вывести сообщение если эти данные уже есть в таблице(не важно что они физически могут повторяются, нужно просто знать что они есть, т.е. просто вывести сообщение). Именно связать эти две таблицы во время фильтрации не получается. Пробовал использовать JOIN для объединения, но результатов это не дало.


Пробовал использовать JOIN для объединения, но результатов это не дало.
попробовал увидеть как вы это делаете и не получилосьнапишите код или ждите мой хрустальный шар из ремонта


у вас случайно нет мыслей, что никто, кроме вас, не знает, как устроены ваши таблицы ? чем вам помочь? ссылку на учебник SQL дать?


Фильтр на две таблицы не рассчитан. Пользуйтесь Query.


попробовал увидеть как вы это делаете и не получилось напишите код или ждите мой хрустальный шар из ремонта
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)


FROM Table1 INNER JOIN Table2 ON Table1.Field6 = Table2.Field5
что это? в запрос нужно писать имена таблиц в СУБД, какие Table и Field?почитайте про запросы или делайте как написал krapotkin в #4