0

我需要使用相当复杂的多表查询作为连续表单的数据源,但要让表单保持可编辑状态。我需要编辑的所有表单字段都只链接到一个表,但我仍然需要以不可编辑的方式在一些字段中显示来自多表查询的信息。我已经在“仅显示”字段的记录源查询中使用 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; 
4

0 回答 0