Сложный запрос при Pomoshi Tquery/tadoquery

Тема в разделе "Delphi - Базы данных", создана пользователем vsbdjkvlsdvsd, 26 май 2010.

  1. vsbdjkvlsdvsd

    vsbdjkvlsdvsd Гость

    Есть один запрос такого плана:
    select contragents.caption, transpr.caption from contragents, transpr where contragents.isfysical = transpr.isfysical

    Смысл запроса не важен, главное, что он работает, допустим, в Access.

    Связываем данный TADOQuery с компонентом, например, TDBGrid.
    В TADOQuery в параметр SQL добавляем етот запрос, кликаем Active = true, тоже ошибок не выдаёт. В таблице появляются два поля: один - наименование контрагента (contragent.caption), другое - строковое выражение логического isFysical, которое выдаёт таблица transp.

    Запускаем приложение, выполняем код:
    with Resource.ContragentsQuery do begin
    SQL.Clear;
    SQL.Add('наш запрос');
    Open
    end;

    В Runtime выпадает ошибка: contragent: field ' caption' not found

    Я примерно понимаю, что перед выполнением программы надо щёлкнуть по запросу и добавить в него поля заранее. Но тут возникают две проблемы:
    1. Вышеописанная
    2. Если поле лишнее, то есть, оно не упомянуто в запросе, то вылетает подобного рода ошибка.

    Как побороть хотя бы первую? Ну и заодно можете по поводу второй подсказать?
     
  2. V88

    V88 Well-Known Member

    Регистрация:
    22 окт 2008
    Сообщения:
    51
    Симпатии:
    0
    Если запрос писать в коде, то лучше в TADOQuery вообще удалить все поля (двойной клик по TADOQuery - Select All - Delete).
    Лучше запрос писать прямо в свойстве SQL, заранее очистив поля TADOQuery, а затем снова их добавить (хотя можно просто оставить без полей).
    Это может вообще ни в этом TADOQuery, либо вообще такого поля нет в табл. БД. Проверь все внимательно.
     
  3. rdama

    rdama Гость

    Поля из ADOQuery лучше удали.
    И еще на будущее так сказать старайся не пользоваться такими жуткими запросами как:
    select contragents.caption, transpr.caption from contragents, transpr where contragents.isfysical = transpr.isfysical

    Ведь можно использовать такие вещи как AS и псевдонимы на таблицы.
    Дабы получить что-то типа этого:
    select c.caption, t.caption AS cap from contragents c, transpr t where c.isfysical = t.isfysical
    в результате у тебя будут 2 поля одно caption а второе cap.
    Хотя если ты работешь с Access, то я не помню насколько там реализована поддержка псевдонимов.

    И по логике после того как ты поправишь запрос твоя ошибка уйдет.

    А еще вопрос: А зачем такого плана запрос писать в коде?
     
Загрузка...
Похожие Темы - Сложный запрос при
  1. SergEkb
    Ответов:
    4
    Просмотров:
    1.157
  2. iasakov
    Ответов:
    0
    Просмотров:
    1.984
  3. mrtg
    Ответов:
    14
    Просмотров:
    231
  4. erdi
    Ответов:
    1
    Просмотров:
    139
  5. lmike
    Ответов:
    23
    Просмотров:
    784

Поделиться этой страницей