![]() |
|
![]() ![]() ![]() |
|
crossmark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 28.4.2010 Репутация: нет Всего: нет |
Здравствуйте!
Пишу программу с первым применением БД. БД 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; но выходит ошибка. помогите как их связать программно и запросом. Спасибо! |
|||
|
||||
superVad |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
Очень жаль, что нам ничего не известно про то, что это за ошибка и в какой строке она возникает. Добавлено через 5 минут и 50 секунд Не ясна связь с в запросе с таблицей Answer.
Зачем в запросе делать связь с таблицей Frase если она не используется ни в селекте ни в условиях. |
||||
|
|||||
crossmark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 28.4.2010 Репутация: нет Всего: нет |
какая связь? в таблице 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 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
Пользуйся кнопкой код для оформления кода!
Где же они связаны в запросе?
Для связи надо во втором запросе добавить условие с параметром. Параметру дать такое же имя как называется поле в первом запросе. В поле DataSource компонента QuerySearchFrase указать датасорс Query_Search. |
||||||
|
|||||||
crossmark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 28.4.2010 Репутация: нет Всего: нет |
я и сам догадываюсь, что надо связь написать, собственно я об этом и спрашиваю. иначе, если я это мог реализовать, и не создавал эту тему. я понимаю, что там одно к другому не пришей. но я написал свою начальную мысль. есть конечно написать два цикла по таблицам.... но это тупая глупость (хотя осуществима) это и долго и не оптимизировано. я же и хочу узнать. я догадываюсь, что можно и на SQL как-то вложено написать. только как. ведь это первая моя программа с применением БД. и чувствую что там нет ничего сложно, но ведь не все же с первого раза в асы. |
|||
|
||||
Antimol |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Для выбора в первый 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 - ошибку исправил Это сообщение отредактировал(а) Antimol - 2.4.2011, 13:24 --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
||||
|
|||||
superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
Antimol, у тебя в первом запросе 2 раза WHERE, там and наверное надо. Кстати вот и связь с Answer
![]() Мне кажется, что если полю датасорс ADOQuery2 присвоить DataSource1 то будет работать и без события onDataChange. |
|||
|
||||
crossmark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 28.4.2010 Репутация: нет Всего: нет |
хорошо попробую разобраться потом отпишусь
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
оформляй код с помощью кнопки КОД
|
|||
|
||||
crossmark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 28.4.2010 Репутация: нет Всего: нет |
Antimol спасибо!
все получилось! большое спасибо! |
|||
|
||||
Looose91 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.3.2011 Репутация: нет Всего: нет |
Лююююди!Здрасте! помогите! мне надо сделать БД на Делфи + связать с ACCESS тоисть на оборот! пробую связать через ADO чет не получается! p.s Я не такой знаток программирования но учусь! помогите с этим!
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Сколько?
|
|||
|
||||
Antimol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Пожалуйста.
![]() --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |