Доступ vba изменить запрос def, чтобы изменить отображаемые столбцы? - PullRequest
0 голосов
/ 09 июня 2011

Я использую объект CurrentDb.QueryDefs, чтобы изменить sql в моем запросе. Это работает хорошо, пока я не изменю предложение select. Я хочу, чтобы в запросе теперь отображались только поля, названные в моем новом предложении select. Вместо этого заголовки столбцов по-прежнему отображаются, но значения отсутствуют. Я отображаю запрос в подчиненной форме.

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

ПРИЧИНА: Это форма расширенного поиска, где флажки представляют каждое поле, и пользователь может удалять и добавлять поля при каждом поиске.

1 Ответ

2 голосов
/ 10 июня 2011

Вы не можете запрашивать, вы должны обновить исходный объект подчиненной формы:

MySubformControl.SourceObject = ""
MySubformControl.SourceObject = "Query.MyQuery"

Для тестирования я создал таблицу Table1 с полями Field1, ..., Field4, затем форму с 4 флажками и подчиненной формой, а затем запрос Query1, который содержит поля из Table1. Вот код позади формы (я позволил Access назвать все мои объекты, поэтому подчиненная форма называется Child8):

Private Sub Check0_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Check2_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Check4_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Check6_AfterUpdate()
    Rewrite_Query
End Sub

Private Sub Rewrite_Query()

    Dim qdf     As QueryDef
    Dim strSQL  As String

    Set qdf = CurrentDb.QueryDefs("Query1")
    If Check0.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field1"
    End If

    If Check2.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field2"
    End If

    If Check4.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field3"
    End If

    If Check6.Value = True Then
        If Len(strSQL) > 0 Then strSQL = strSQL & ","
        strSQL = strSQL & "Field4"
    End If

    strSQL = "SELECT " & strSQL & " FROM Table1"

    qdf.SQL = strSQL
    qdf.Close
    Set qdf = Nothing

    Child8.SourceObject = ""
    Child8.SourceObject = "Query.Query1"

End Sub
...