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

  • Автор темы vsbdjkvlsdvsd
  • Дата начала
V

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. Если поле лишнее, то есть, оно не упомянуто в запросе, то вылетает подобного рода ошибка.

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

V88

Если запрос писать в коде, то лучше в TADOQuery вообще удалить все поля (двойной клик по TADOQuery - Select All - Delete).
Лучше запрос писать прямо в свойстве SQL, заранее очистив поля TADOQuery, а затем снова их добавить (хотя можно просто оставить без полей).
В Runtime выпадает ошибка: contragent: field ' caption' not found
Это может вообще ни в этом TADOQuery, либо вообще такого поля нет в табл. БД. Проверь все внимательно.
 
R

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, то я не помню насколько там реализована поддержка псевдонимов.

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

А еще вопрос: А зачем такого плана запрос писать в коде?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!