Использование запроса к нескольким таблицам для отображения данных в редактируемой непрерывной форме в MS Access - PullRequest
0 голосов
/ 30 октября 2019

Мне нужно использовать довольно сложный запрос к нескольким таблицам в качестве источника данных для непрерывной формы, но форма должна оставаться редактируемой. Все поля формы, которые мне нужно отредактировать, связаны только с одной таблицей, но мне все еще нужно отображать информацию из многостолового запроса в нескольких полях в неизменяемой форме. Я выполнил это, используя DLookUp в исходном запросе записи для полей «только для отображения», но производительность ужасна, поскольку база данных разделена, а резервная копия находится на сервере со связанными таблицами. Если я выполняю то же самое, просто используя SELECT для полей запроса, мне нужно отобразить производительность в порядке, но вся форма становится недоступной для редактирования.

Будем весьма благодарны за любые идеи о том, как добиться этого более эффективно. Я связал изображения формы, страницы дизайна формы, страниц дизайна запроса и вставил соответствующий SQL ниже.

Пример формы Пример дизайна формы

ITNQuery SQL: ITNQuery

SELECT itn.id, 
       itn.itnnumber, 
       itn.portfolio, 
       itn.topic, 
       itn.itndate, 
       itn.statusid, 
       itn.notes, 
       itn.delivereddate, 
       itn.leadlinguistid, 
       itn.teamid                              AS Expr1, 
       itn.newversionentry, 
       itn.previousitn, 
       itn.reviewinglinguistid, 
       itn.itnresponse, 
       itn.leadresponsecoordinatorid, 
       itn.datesenttoleadcoordinator, 
       itn.responsedeadline, 
       itn.priority, 
       itn.casemanagerid, 
       itn.responsecoordinator2id, 
       itn.datesenttocoordinator2, 
       itn.responsecoordinator3id, 
       itn.datesenttocoordinator3, 
       itn.responsecoordinator4id, 
       itn.datesenttocoordinator4, 
       itn.coordinatinglinguistid, 
       Iif([itn].[statusid] <> 9 
           AND [itn].[statusid] <> 10 
           AND [itn].[statusid] <> 19 
           AND [itn].[statusid] <> 20 
           AND [itn].[statusid] <> 28 
           AND [itn].[statusid] <> 30, Iif([itn].[delivereddate] > 0, 
       Datediff("d", [itn].[itndate], [itn].[delivereddate]), 
       Datediff("d", [itn].[itndate], Now()))) AS ITNAge, 
       itn.newversionentry, 
       itn.teamid, 
       statuslist.[display order], 
       itn.cooraspondanceid, 
       itn.documenttypeid, 
       Dlookup("ducumentabreviation", "associateditntextquery", 
       "currentitnid =" & [itn].[id])         AS AssocAbrev, 
       Dlookup("itnnumber", "associateditntextquery", 
       "currentitnid =" & [itn].[id]) 
                                               AS AssocNumber 

AssociatedITNTextQuery: AssociatedITNTextQuery

SELECT associateditns.current_itn_id AS CurrentITNID, 
       associateditns.associated_itn_id, 
       associateddocstextquery1.maxofitndate, 
       documenttypes.ducumentabreviation, 
       itn.itnnumber, 
       itn.itndate 
FROM   (itn 
        INNER JOIN documenttypes 
                ON itn.documenttypeid = documenttypes.id) 
       INNER JOIN (associateditns 
                   INNER JOIN associateddocstextquery1 
                           ON associateditns.current_itn_id = 
                              associateddocstextquery1.current_itn_id) 
               ON itn.id = associateditns.associated_itn_id 
WHERE  ( ( ( itn.itndate ) IN ( associateddocstextquery1 ! maxofitndate ) ) 
         AND 
         ( ( associateddocstextquery1.current_itn_id ) = 
           associateditns ! current_itn_id ) ); 

AssociatedITNTextQuery1: AssociatedITNTextQuery1

SELECT associateditns.current_itn_id, 
       Max(ITN_1.itndate) AS MaxOfITNDate 
FROM   itn AS ITN_1 
       INNER JOIN associateditns 
               ON ITN_1.id = associateditns.associated_itn_id 
GROUP  BY associateditns.current_itn_id; 
...