2016-08-05 40 views
1

Ich habe einen Listenfeldnamen Tier und die Zeile Quelle ist auf den folgenden Code festgelegt, in dem die Abfrage "Tier" ist eine Pass-Through-Abfrage. Das Listenfeld füllt jedoch keine Tiere. Hinweis: Wenn ich die Abfrage "Tier" als eigenständige Pass-Through-Abfrage ausführe, läuft sie korrekt, sie füllt das Listenfeld nicht aus. Es ist fast so, als würde die Abfrage nicht ausgeführt, wenn in das Listenfeld geklickt wird.Einstellung RowSource in Access mit Pass-Through-Abfrage

Private Sub animallist_Enter() 
    Dim Q   As QueryDef 
    Dim DB   As Database 

    ' Use for dynamic SQL statement' 
    Dim strSQL  As String 

    ' Modify the Query. 
    Set DB = CurrentDb() 
    Set Q = DB.QueryDefs("animal") 

    strSQL = "Select distinct(animal) From AnimalDB.Animaltable" 

    Q.SQL = strSQL 
    Q.Close 

    Me.animal.RowSource = strSQL 
End Sub 

Wenn ich auf „AnimalDB.Animaltable“ über ODBC verbinden und führen Sie den folgenden Code (die Abfrage an einem ausgewählten statt passieren schaltend), wird das Listenfeld mit Tieren bevölkert.

Private Sub animallist_Enter() 
    Dim Q   As QueryDef 
    Dim DB   As Database 

    ' Use for dynamic SQL statement' 
    Dim strSQL  As String 

    ' Modify the Query. 
    Set DB = CurrentDb() 
    Set Q = DB.QueryDefs("animal") 

    strSQL = "Select distinct(animal) From [AnimalDB_Animaltable]" 

    Q.SQL = strSQL 
    Q.Close 

    Me.animal.RowSource = strSQL 
End Sub 

Warum füllt die Pass-Through-Abfrage das Listenfeld nicht auf?

Antwort

3

Sie setzen ein Querydef, aber nicht verwenden.

Me.animal.RowSource = strSQL 

sollte

Me.animal.RowSource = "animal" 

oder

Me.animal.RowSource = Q.Name 

Ihr zweites Codebeispiel funktioniert, werden, da ein Zugriff SELECT SQL in einer Access-Abfrage oder direkt als rowsource verwendet werden kann.

P.S. Q.Close sollte Set Q = Nothing sein, aber das wird auch nicht wirklich benötigt, weil es eine lokale Variable ist, die am Ende des Subs zerstört wird.

+0

so einfach !!! Ich habe viel zu viel Zeit damit verbracht. Vielen Dank! – AlmostThere