DAO recordset foutmelding

Status
Niet open voor verdere reacties.

VB noob

Gebruiker
Lid geworden
11 feb 2009
Berichten
78
Ik heb de volgende code:
Code:
Public Function DateFirstSeen(AnimalID As Variant) As Variant

    Dim strSQL As String
    Dim rst1 As DAO.Recordset ' do not forget to add a reference to DAO
    
    If Not IsNull(AnimalID) Then
        strSQL = "SELECT Min([tblSightings].[SightingDate]) AS FirstDate " & _
           "FROM tblSightings INNER JOIN tblAnimalsatSighting ON tblSightings.SightingID = tblAnimalsatSighting.SightingID " & _
            "WHERE (((tblAnimalsatSighting.AnimalID)='" & AnimalID & "'));"
        Set rst1 = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbSeeChanges)
        rst1.MoveFirst
        DateFirstSeen = rst1!FirstDate
        rst1.Close
        Set rst1 = Nothing
    End If
    
    End Function

Nu krijg ik een foutmelding als die module aangeroepen wordt. De melding staat in de regel
Code:
Set rst1 = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbSeeChanges)

Ik dacht dat misschien niet de juiste library toegevoegd was maar als ik daarnaar kijk staat de DAO library daar wel in.
Dus het zal wel met iets anders te maken hebben maar ik heb geen flauw idee wat.
Kan iemand mij op weg helpen?
 

Bijlagen

  • DAO.jpg
    DAO.jpg
    37,7 KB · Weergaven: 38
Probeer eens:

Code:
Public Function DateFirstSeen(AnimalID As Variant) As Variant
  If Not IsNull(AnimalID) Then
    With CurrentDb.OpenRecordset("SELECT Min([tblSightings].[SightingDate]) AS FirstDate FROM tblSightings INNER JOIN tblAnimalsatSighting ON tblSightings.SightingID = tblAnimalsatSighting.SightingID WHERE (((tblAnimalsatSighting.AnimalID)='" & AnimalID & "'))")
      .MoveFirst
      DateFirstSeen = rst1!FirstDate
      .Close
    End With
  End If
End Function
 
Laatst bewerkt:
Toch niet :(
Krijg toch weer een foutmelding bij de volgende regel:
With CurrentDb.OpenRecordset("SELECT Max([tblSightings].[SightingDate]) AS LastDate FROM tblSightings INNER JOIN tblAnimalsatSighting ON tblSightings.SightingID = tblAnimalsatSighting.SightingID WHERE (((tblAnimalsatSighting.AnimalID)='" & AnimalID & "'))")

Nou dacht ik dat het in '" & AnimalID & "' kon zitten aangezien alle AnimalIDs nummers zijn. Dus de buitenste haakjes weggehaald en nu geeft hij een foutmelding bij:
DateLastSeen = rst1!LastDate

Overigens heb de geadviseerde code niet geheel overgenomen maar er het volgende aan toegevoegd aangezien ik anders de foutmelding kreeg dat een variabele niet gedefinieerd was:
Dim strSQL As String
Dim rst1 As DAO.Recordset
 
Verwijder Opiton Explicit; dan krijg je die melding niet meer.
Mijn code bevat slecht 1 variabele: Datefirstseen
Dim strSQL As String
Dim rst1 As DAO.Recordset
zijn dan onzin omdat ze als variabele niet mijn code voorkomen.
 
Laatst bewerkt:
Zet in je verwijzingen je verwijzing naar de DAO library zo hoog mogelijk in de lijst.

Pas je code als volgt aan

Code:
Public Function DateFirstSeen(AnimalID As Integer) As Date

    Dim strSQL As String
    Dim rst1 As DAO.Recordset ' do not forget to add a reference to DAO
    
    If Not IsNull(AnimalID) Then
        strSQL = "SELECT Min([tblSightings].[SightingDate]) AS FirstDate " & _
           "FROM tblSightings INNER JOIN tblAnimalsatSighting ON tblSightings.SightingID = tblAnimalsatSighting.SightingID " & _
            "WHERE tblAnimalsatSighting.AnimalID= " & AnimalID & ";"
        Set rst1 = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbSeeChanges)
        rst1.MoveFirst
        DateFirstSeen = rst1!FirstDate
        rst1.Close
        Set rst1 = Nothing
    End If
    
    End Function

Hou het tenslotte bij het expliciet definieren van variabelen, zeker als je geen VBA expert bent.
Expliciet definieren is sowieso de "standaard" die wordt gebruikt en geadviseerd, zelfs door experts.

Tardis
 
Thanks! In eerste instantie weer foutmeldingen, maar toen bedacht ik me dat mogelijk de query op dit moment geen resultaat gaf omdat de tabel Animalsatsighting nog leeg was.
Dus die gevuld en nu kwam er wel resultaat.
Nogmaals dank voor jullie tijd!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan