powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TFDQuery.RefreshRecord() - баг или туплю?
4 сообщений из 4, страница 1 из 1
TFDQuery.RefreshRecord() - баг или туплю?
    #39992330
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже не первый раз сталкиваюсь с непонятными багом(?).

Есть TFDQuery, в нём простой запрос:
Код: sql
1.
2.
SELECT L.ID, L.NAME, LT.NAME LTNAME, L.NOTE FROM LOCATIONS L
JOIN LOCTYPES LT ON LT.ID = L.TYPE_ID



Вызываю Query.RefreshRecord(True) ; и получаю результат как на картинке ниже:


Данные в базе не изменялись, естественно.

Вопрос: это я что-то делаю не так или как вообще?..
...
Рейтинг: 0 / 0
TFDQuery.RefreshRecord() - баг или туплю?
    #39992344
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Вопрос: это я что-то делаю не так или как вообще?..
А на пустом проекте?

Я вижу, что в гриде порядок полей не соответстует порядку полей в запросе
...
Рейтинг: 0 / 0
TFDQuery.RefreshRecord() - баг или туплю?
    #39992348
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Я вижу, что в гриде порядок полей не соответстует порядку полей в запросе
Это вообще с чего влиять должно, если они там по именам? В гриде же пользователи могут сами столбцы перетаскивать по-умолчанию.

Add: сделал грид вообще без столбцов - то же самое. Проблема именно в Query, а не в гриде: Query['LTNAME'] возвращает неверное значение.
_Vasilisk_

А на пустом проекте?
Это и есть по-сути пустой проект, только начал его.
...
Рейтинг: 0 / 0
TFDQuery.RefreshRecord() - баг или туплю?
    #39992352
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем это именно баг в FireDAC, когда в запросе участвуют таблицы с одинаковыми названиями полей.

Переделал сначала запрос:
Код: sql
1.
2.
SELECT L.ID, L.NAME AS LN, LT.NAME AS LTN, L.NOTE FROM LOCATIONS L
JOIN LOCTYPES LT ON LT.ID = L.TYPE_ID


При вызове RefreshRecord() получил ошибку, что поле 'A.NAME' не найдено. Посмотрел в стэк и нашёл "чудесный" запрос, которым этот компонент получает данные для RefreshRecord:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT A.ID, A.NAME AS "LN", A.NAME AS LTN, A.NOTE
FROM (
  SELECT L.ID, L.NAME AS LN, LT.NAME AS LTN, L.NOTE FROM LOCATIONS L
  JOIN LOCTYPES LT ON LT.ID = L.TYPE_ID
  ) A
WHERE A.ID = ?

??? ??? ??? ... !!!

Если в таблице LOCTYPES переименовать поле NAME в TNAME, то всё прекрасно работает.

Короче Refresh() наше всё.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TFDQuery.RefreshRecord() - баг или туплю?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]