簡體   English   中英

訪問 VBA 子窗體動態 SQL 父窗體計數慢

[英]Access VBA Subform Dynamic SQL Parent Form Count Slow

我在表單上有一個過濾器私有 function,用於為子表單上的記錄源動態生成 SQL,用於搜索記錄。 我運行主窗體的這個 onload,以及一系列文本框(日期)、組合框和復選框控件的更新后。 下面是過濾器代碼。 當表單加載時,有 15,247 條記錄。 當我加載表單時,它被凍結了一段時間,得到計數。

子表單是數據表,我希望計數大於導航按鈕記錄計數,所以我在主表單的表單頁腳上放置了一個文本框。 為了在主窗體上顯示子窗體記錄的計數,我在子窗體的窗體頁腳中放置了一個文本框,它是 control source =count(*)

在主窗體頁腳文本框中,控件源是
=[frmsubform].[Form]![txtCountrecs] & "記錄"

它工作,但它是如此緩慢。 我想知道是否有辦法讓這變得不那么緩慢和滯后。

Private Sub Filters()
    Dim fSQL As String

    fSQL = "SELECT [fields] " & _
            "FROM tbltable1 LEFT JOIN tbltable2 ON tbltable1.ID = tbltable2.FKtbl1ID " & _
            "WHERE ((tbltable3.ID) Is Not Null) AND ((tbltable4.ID) Is Not Null)) "

    If Nz(Me.cboFilterTo.Value, 0) <> 0 Then
        fSQL = fSQL & " AND tbltable5.ID = " & Me.cboFilterTo.Column(0)
    End If

    If Nz(Me.cboFilterFrom.Value, 0) <> 0 Then
        fSQL = fSQL & " AND tbltable6.ID = " & Me.cboFilterFrom.Column(0)
    End If

    If Nz(Me.txtDateOnOrAfter, 0) <> 0 Then
        fSQL = fSQL & " AND tbltable4.dtdate >= " & Me.txtDateOnOrAfter
    End If

    If Nz(Me.txtDateOnOrBefore, 0) <> 0 Then
        fSQL = fSQL & " AND tbltable4.dtdate <= " & Me.txtDateOnOrBefore
    End If

    If Nz(Me.chkUncompleted, 0) <> 0 Then
        fSQL = fSQL & " AND nz(tbltable3.dtdatedone,0) = 0"
    End If

'Debug.Print fSQL
    Me.frmSubform.Form.RecordSource = fSQL
    Me.frmSubform.Form.Requery
End Sub

如果有任何方法可以加快速度,我會喜歡一些建議。

我找到了答案,所以我想為任何可能有幫助的人發布解決方案。

為了使表單加載更快,我將初始 fSQL select 轉換為 SQL 視圖,然后將初始 fSQL 設置為:

fSQL = "SELECT * FROM vw_MyNewView WHERE 1 = 1 "

然后,在我設置子表單的記錄源並重新查詢它之后,我有以下內容:

With Me.frmSubform.Form.RecordsetClone
    If .RecordCount > 0 Then .MoveLast
    ccount = .RecordCount
End With
Me.txtCountRecords = ccount & " Records"

表單加載速度更快,而且這個計數也很快制表。

希望這對其他人有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM