![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi Access and ADO [D7, Access]
crossmark © (2011-03-31 11:52:00)Здравствуйте!
Пишу программу с первым применением БД.
БД 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 (2011-04-03 14:52:00) [1]спасибо!
b z (2011-03-31 15:55:00) [2]Запросом
dm.QuerySearchFrase.SQL.Text := 'SELECT Id_Answ, answer FROM Answer WHERE :Id_Frase=Id_Frase';
crossmark (2011-03-31 15:26:00) [3]хорошо.
в таблице 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
KSergey (2011-03-31 14:56:00) [4]> Smile (31.03.11 12:08) [1]
> Странно, что отрабатывает такой запрос без начальных пробелов в очередном Add
Add добавляет перевод строки между фрагментами.
Ну или метод чтения всех строк свойства Text при конкатенировании отдельных строк добавляет - не вникал.
OW (2011-03-31 14:17:00) [5]WHERE FROM - это такой синтаксис? и давно? (без подкола)
Anatoly Podgoretsky (2011-03-31 12:50:00) [6]Пока еще не увяз в этом болоте, сменит TAdoQuery на TAdoDataset, там и связывать просто.
И. Павел (2011-03-31 12:47:00) [7]только не id, а Id_Frase
Anatoly Podgoretsky (2011-03-31 12:47:00) [8]Вроде он про мастер детайл спрашивает.
Anatoly Podgoretsky (2011-03-31 12:46:00) [9]> Smile (31.03.2011 12:08:01) [1]
Чего странного и нафига там пробелы?
И. Павел (2011-03-31 12:46:00) [10]
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;'
crossmark (2011-03-31 12:34:00) [11]может я с ним договорился :) он работает.
вопрос правда о другом
Smile (2011-03-31 12:08:00) [12]> 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