Извлечение поля поиска или значения, но сохранение RecordSet обновляемым - PullRequest
0 голосов
/ 04 марта 2020

У меня есть подчиненная форма, которая отображает данные из таблицы SQL Server, которые пользователи могут изменять в режиме реального времени. Это отлично работает. Мне нужно отобразить столбец, который возвращает агрегированный показатель только для визуального отображения. Пользователю не нужно иметь возможность обновлять эту цифру (что, конечно, в любом случае не может), но мне нужно отображать ее для каждой строки. Каков наилучший способ создать это поле поиска только для чтения, не предотвращая редактирование / добавление элементов таблицы данных Subform?

Я добавил строку с помощью запроса RecordSource, но из-за этого набор данных не обновляется из-за агрегация:

 SELECT a.ActivityID, 
        a.ActivityTypeID, 
        a.ActivityName, 
        ap.DateActive, 
        ap.Points, 
        a.ActivityActive 
   FROM (ActivityPoints AS ap 
  INNER JOIN Activity AS a 
        ON a.ActivityID = ap.ActivityID) 
  INNER JOIN 
        (
             SELECT ap2.ActivityID as [ActID],
                    MAX(ap2.DateActive) as [MaxDate]            
               FROM ActivityPoints as ap2           
              GROUP BY          
                    ap2.ActivityID
        ) AS ap2
        ON ap.DateActive = ap2.MaxDate
        AND a.ActivityID = ap2.ActID
  ORDER BY 
        a.ActivityID;

Я также пытался сохранить это как запрос и выбрать из него все примерно так, но это тоже нельзя обновить:

SELECT a.ActivityID, 
       a.ActivityTypeID, 
       a.ActivityName, 
       s.DateActive, 
       s.Points, 
       a.ActivityActive
  FROM SD_Activity AS a
  LEFT JOIN SavedQuery as s
       ON s.ActivityID = a.ActivityID

Наконец, последнее решение Я должен был создать поле DLookup в ControlSource поля в Subform, чтобы извлечь данные из SavedQuery. Это работает, но, как вы можете себе представить, невероятно ресурсоемкий и громоздкий:

RecordSource

SELECT a.ActivityID,  
       a.ActivityTypeID,
       a.ActivityName, 
       a.ActivityActive
  FROM Activity AS a;

ControlSource

=DLOOKUP("[DateActive]", "[SavedQuery]", "[SavedQuery]![ActivityID] = [ActivityID]")

Каков наилучший способ получения доступного только для чтения столбца поиска в моей таблице данных подчиненной формы, в котором все остальные поля можно обновлять?

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Обычно это работает, когда вы выполняете агрегирование в отдельном запросе. После этого вы можете присоединиться к таблице с запросом.

0 голосов
/ 04 марта 2020

Существует также функция DMAX, аналогичная dlookup. Это поможет?

DMax ( expression, domain, [criteria] )

Смотрите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...