-
Здравствуйте! Пишу программу с первым применением БД. БД 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; но выходит ошибка. помогите как их связать программно и запросом. Спасибо!
-
> 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)+'%"');
Странно, что отрабатывает такой запрос без начальных пробелов в очередном Add
-
может я с ним договорился :) он работает. вопрос правда о другом
-
> Smile (31.03.2011 12:08:01) [1]
Чего странного и нафига там пробелы?
-
WHERE FROM Frase INNER JOIN Answer ON Frase.Id_Frase=Answer.Id_Frase; может быть, вам нужно что-то в этом роде: 'WHERE FROM Frase INNER JOIN Answer ON ' + dm.Query_Search.FieldByName('id').AsString + '=Answer.Id_Frase;'
-
только не id, а Id_Frase
-
Вроде он про мастер детайл спрашивает.
-
Пока еще не увяз в этом болоте, сменит TAdoQuery на TAdoDataset, там и связывать просто.
-
WHERE FROM - это такой синтаксис? и давно? (без подкола)
-
> Smile (31.03.11 12:08) [1] > Странно, что отрабатывает такой запрос без начальных пробелов в очередном Add
Add добавляет перевод строки между фрагментами. Ну или метод чтения всех строк свойства Text при конкатенировании отдельных строк добавляет - не вникал.
-
хорошо. в таблице 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
-
Запросом dm.QuerySearchFrase.SQL.Text := 'SELECT Id_Answ, answer FROM Answer WHERE :Id_Frase=Id_Frase';
-
спасибо!
|