Вопрос по SQLRefresh

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
Ответить
Jane
Сообщения: 10
Зарегистрирован: Пт 12 сен 2014 05:57

Вопрос по SQLRefresh

Сообщение Jane » Вт 01 дек 2015 06:43

Здравствуйте,
для выборки данных из двух таблиц и отображения на DBGrid используется такой запрос:

Код: Выделить всё

  MyQuery.SQL.Text := 'SELECT t1.id case_id,status,t2.account,t2.name '+
                      'FROM cases t1, contragents t2 '+
                      'WHERE (NOT t1.deleted) AND (t2.id=t1.contragent_id)';
После редактирования какой-либо записи (на отдельной форме) необходимо обновить данные выборки, а конкретно - текущую отредактированную запись, для чего используется MyQuery.RefreshRecord с таким свойством:

Код: Выделить всё

  MyQuery.SQLRefresh.Text := 'SELECT t1.id case_id,status,t2.account,t2.name '+
                             'FROM cases t1, contragents t2 '+
                             'WHERE (t1.id=:t1.id) AND (t2.id=t1.contragent_id)';
После выполнения MyQuery.RefreshRecord имеем такую ошибку:
Not found field corresponding parameter t1.
Из справки к MyDAC:
To create a SQLRefresh statement at design-time, use the query statements editor.

Example
SELECT Shipname FROM Orders
WHERE
OrderID = :OrderID
И это работает когда в запросе 1 таблица. Но как быть, если в запросе используется две таблицы с одинаковыми полями 'id'?
Как правильно записать часть 'WHERE t1.id=:t1.id' из MyQuery.SQLRefresh.Text, чтобы не было ошибки?

ViktorV
Devart Team
Сообщения: 202
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Вопрос по SQLRefresh

Сообщение ViktorV » Ср 02 дек 2015 09:43

Для корректной работы вашего примера вам следует заменить имя параметра t1.id на псевдоним case_id:

Код: Выделить всё

  t1.id = :case_id

Ответить