Доступ к VBA Subform Dynamic SQL Количество родительских форм Медленное - PullRequest
0 голосов
/ 16 октября 2019

У меня есть закрытая функция фильтров в форме, чтобы динамически генерировать SQL для источника записей в подчиненной форме, для поиска записей. Я запускаю эту загрузку основной формы, а также последующие обновления серии текстового поля (даты), поля со списком и элементов управления флажка. Ниже приведен код фильтров. Когда форма загружается, есть 15 247 записей. Когда я загружаю форму, она на некоторое время замирает, получая счет.

Подформой является таблица данных, и я хотел, чтобы число было больше, чем количество записей кнопок навигации, поэтому я поместил текстовое поле в нижний колонтитул основной формы. Чтобы отобразить число записей подчиненной формы в главной форме, я поместил текстовое поле в нижний колонтитул формы, и его источник управления = count (*)

В главном текстовом поле нижнего колонтитула источник управления:
= [frmsubform]. [Form]! [TxtCountrecs] & "Records"

Работает, но очень медленно. Мне интересно, есть ли способ сделать это менее медленным и медленным.

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

Если есть какой-то способ сделать это быстрее, я бы с удовольствием посоветовал.

1 Ответ

0 голосов
/ 16 октября 2019

Я нашел ответ, поэтому я хотел опубликовать решение для всех, кому оно может помочь.

Чтобы ускорить загрузку формы, я преобразовал исходный выбор fSQL в представление 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"

Форма загружается намного быстрее, и этот счет сводится в таблицутоже быстро.

Надеюсь, это поможет другим!

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