Конференция "Начинающим" » Delphi Access and ADO [D7, Access]
 
  • crossmark (31.03.11 11:52) [0]
    Здравствуйте!
    Пишу программу с первым применением БД.
    БД 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;
    но выходит ошибка.
    помогите как их связать программно и запросом. Спасибо!
  • Smile (31.03.11 12:08) [1]
    > 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
  • crossmark (31.03.11 12:34) [2]
    может я с ним договорился :) он работает.
    вопрос правда о другом
  • Anatoly Podgoretsky © (31.03.11 12:46) [3]
    > Smile  (31.03.2011 12:08:01)  [1]

    Чего странного и нафига там пробелы?
  • И. Павел © (31.03.11 12:46) [4]
    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;'

  • И. Павел © (31.03.11 12:47) [5]
    только не id, а Id_Frase
  • Anatoly Podgoretsky © (31.03.11 12:47) [6]
    Вроде он про мастер детайл спрашивает.
  • Anatoly Podgoretsky © (31.03.11 12:50) [7]
    Пока еще не увяз в этом болоте, сменит TAdoQuery на TAdoDataset, там и связывать просто.
  • OW © (31.03.11 14:17) [8]
    WHERE FROM - это такой синтаксис? и давно? (без подкола)
  • KSergey © (31.03.11 14:56) [9]
    > Smile   (31.03.11 12:08) [1]
    > Странно, что отрабатывает такой запрос без начальных пробелов в очередном Add

    Add добавляет перевод строки между фрагментами.
    Ну или метод чтения всех строк свойства Text при конкатенировании отдельных строк добавляет - не вникал.
  • crossmark (31.03.11 15:26) [10]
    хорошо.
    в таблице 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
  • b z (31.03.11 15:55) [11]
    Запросом
    dm.QuerySearchFrase.SQL.Text := 'SELECT Id_Answ, answer FROM Answer WHERE :Id_Frase=Id_Frase';
  • crossmark (03.04.11 14:52) [12]
    спасибо!
 
Конференция "Начинающим" » Delphi Access and ADO [D7, Access]
Есть новые Нет новых   [134432   +18][b:0][p:0.001]