| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Delphi Access and ADO |
| Автор: crossmark 31.3.2011, 10:54 |
| Здравствуйте! Пишу программу с первым применением БД. БД Access. Там несколько таблиц. В данном случае беру две таблицы это шаблоны фраз и сама фраза. связанны они по Id. В приложении использовал: AdoConnection, AdoQuery, Source, 2 BDGrid Смысл в том что поступает некая строка сообщения и ее надо проверить по таблице Frase по полю mask. делал вот так: dm.Query_Search.SQL.Clear; dm.Query_Search.SQL.Add('SELECT Frase.Id_Frase, Frase.mask, Frase.text, Answer.answer'); dm.Query_Search.SQL.Add('FROM Frase'); dm.Query_Search.SQL.Add('WHERE mask LIKE'+' "%'+GetMask(val)+'%"'); // showmessage(dm.Query_Frase.SQL.Text); dm.Query_Search.ExecSQL; dm.Query_Search.Open; этот метод работает находит или нет(если нет шаблона) выводится на таблицу DBGrid Но столкнулся с такой проблемой. на форме еще есть таблица DBGrid (и таблица в базе Answer) и в ней теперь должна отображаться связь (Frase and Answer по ID) т.е. одна табличка заполняется и должна же как то вторая заполняться по этой связи. как сделать не могу понять думал таким способом: dm.QuerySearchFrase.SQL.Clear; dm.QuerySearchFrase.SQL.Add('SELECT Answer.Id_Answ, Answer.answer'); dm.QuerySearchFrase.SQL.Add('FROM Answer'); dm.QuerySearchFrase.SQL.Add('WHERE FROM Frase INNER JOIN Answer ON Frase.Id_Frase=Answer.Id_Frase;'); // dm.QuerySearchFrase.ExecSQL; dm.QuerySearchFrase.Open; но выходит ошибка. помогите как их связать программно и запросом. Спасибо! |
| Автор: crossmark 31.3.2011, 14:25 |
| какая связь? в таблице Frase ключ Id_Frase в таблице Answer есть поле Id_Frase вот их и связал. таблицы в Accesse работают без нарекательств хорошо, проще... dm.Query_Search.SQL.Clear; dm.Query_Search.SQL.Add('SELECT Frase.Id_Frase, Frase.mask, Frase.text, Answer.answer'); dm.Query_Search.SQL.Add('FROM Frase'); dm.Query_Search.SQL.Add('WHERE mask LIKE'+' "%'+GetMask(val)+'%"'); // showmessage(dm.Query_Frase.SQL.Text); dm.Query_Search.ExecSQL; dm.Query_Search.Open; этим кодом нахожу поиск по шаблону и вывожу инфу в таблицу DBGrid1 из БД таблицы Frase но таблица Frase связана с таблицей Answer и если есть инфа в Frase значит есть информация в таблице Answer и есть у меня DBGrid2 вот как в DBGrid 2 вывести эту связь-информацию на основании Frase |
| Автор: superVad 31.3.2011, 14:43 | ||||||
Пользуйся кнопкой код для оформления кода!
Где же они связаны в запросе?
Для связи надо во втором запросе добавить условие с параметром. Параметру дать такое же имя как называется поле в первом запросе. В поле DataSource компонента QuerySearchFrase указать датасорс Query_Search. |
| Автор: crossmark 31.3.2011, 21:06 | ||
я и сам догадываюсь, что надо связь написать, собственно я об этом и спрашиваю. иначе, если я это мог реализовать, и не создавал эту тему. я понимаю, что там одно к другому не пришей. но я написал свою начальную мысль. есть конечно написать два цикла по таблицам.... но это тупая глупость (хотя осуществима) это и долго и не оптимизировано. я же и хочу узнать. я догадываюсь, что можно и на SQL как-то вложено написать. только как. ведь это первая моя программа с применением БД. и чувствую что там нет ничего сложно, но ведь не все же с первого раза в асы. |
| Автор: Antimol 1.4.2011, 13:50 | ||||
Для выбора в первый DBGrid1: (связь ADOConnection1 ->ADOQuery1->DataSource1->DBGrid1)
Для выбора во второй DBGrid2: (связь ADOConnection1 ->ADOQuery2->DataSource2->DBGrid2) У нас для вывода в первый DbGrid1 существует связь ADOConnection1 ->ADOQuery1->DataSource1->DBGrid1. Для дальнейшей обработки, мы пишем код на событие onDataChange в компонента DataSource1 или на событие AfterScroll компонента ADOQuery1.
Код писал в слепую - могут быть ошибки, но принцип думаю ясен. Когда осуществляется выбор в первом DBGrid1 - данные подгружаются во второй. Кстати AQuery1.Fiels.Field[0].Value - берется id_Frase выбранной записи в первой табличке. Ну забываем о благодарностях в виде повышения/понижения репутации. Спасибо superVad - ошибку исправил |
| Автор: superVad 1.4.2011, 21:37 |
| Antimol, у тебя в первом запросе 2 раза WHERE, там and наверное надо. Кстати вот и связь с Answer Мне кажется, что если полю датасорс ADOQuery2 присвоить DataSource1 то будет работать и без события onDataChange. |
| Автор: crossmark 2.4.2011, 14:04 |
| хорошо попробую разобраться потом отпишусь |
| Автор: Akella 2.4.2011, 19:48 |
| оформляй код с помощью кнопки КОД |
| Автор: crossmark 3.4.2011, 13:54 |
| Antimol спасибо! все получилось! большое спасибо! |
| Автор: Looose91 4.4.2011, 06:17 |
| Лююююди!Здрасте! помогите! мне надо сделать БД на Делфи + связать с ACCESS тоисть на оборот! пробую связать через ADO чет не получается! p.s Я не такой знаток программирования но учусь! помогите с этим! |
| Автор: Akella 4.4.2011, 09:10 |
| Сколько? |
| Автор: Antimol 4.4.2011, 09:19 |
| Пожалуйста. |