Les fonctions dcount, dlookup et dsum d'access en vb6

Contenu du snippet

Ce code est utile lors d'une migration d'Access vers VB6 (et donc aussi vers VB .Net) :

Source / Exemple :


Public Function DLookup(ByVal sChamp$, ByVal sTable$, ByVal sCritere$) As Variant

    ' Implementation de la fonction DLookup d'Access en VB6 :
    ' Relever la valeur d'un champ d'une table avec un critère
    '  si la table et le critère sont inchangés depuis le dernier appel,
    '  une bufférisation permet de gagner du temps !

    Static sMemRq$, asChamps$(), avVal() As Variant
    Dim iNbChamps%, i%

    If sTable & sCritere = sMemRq Then
        iNbChamps = UBound(asChamps)
        For i = 0 To iNbChamps - 1
            If asChamps(i) = sChamp Then
                DLookup = avVal(i)
                Exit Function
            End If
        Next i
        Stop
    End If

    Dim Rq As DAO.Recordset
    Set Rq = m_bd.OpenRecordset(sTable, dbOpenSnapshot)
    Rq.FindFirst sCritere
    If Rq.NoMatch Then
        DLookup = Null
    Else
        DLookup = Rq(sChamp).Value
        
        iNbChamps = Rq.Fields.Count
        ReDim asChamps(iNbChamps)
        ReDim avVal(iNbChamps)
        For i = 0 To iNbChamps - 1
            asChamps(i) = Rq.Fields(i).Name
            avVal(i) = Rq.Fields(i).Value
        Next i
        
        sMemRq = sTable & sCritere
        
    End If
    Rq.Close

End Function

Public Function DSum(ByVal sChamp$, ByVal sTable$, ByVal sCritere$) As Variant

    ' Implementation de la fonction DSum d'Access en VB6 :
    '  faire un cumul d'un champ d'une table avec un critère

    Dim Rq As DAO.Recordset, sSQL$
    sSQL = "SELECT Sum(" & sChamp & ") AS SommeDeChamp FROM " & sTable
    If sCritere <> "" Then sSQL = sSQL & " WHERE " & sCritere
    Set Rq = m_bd.OpenRecordset(sSQL, dbOpenSnapshot)
    If Rq.EOF Then
        DSum = Null
    Else
        DSum = Rq.Fields(0).Value
    End If
    Rq.Close

End Function

Public Function DCount(ByVal sChamp$, ByVal sTable$, ByVal sCritere$) As Variant

    ' Implementation de la fonction DCount d'Access en VB6 :
    '  Compter le nombre d'enregistrement (via un champ) d'une table avec un critère

    Dim Rq As DAO.Recordset, sSQL$
    sSQL = "SELECT " & sChamp & " FROM " & sTable
    If sCritere <> "" Then sSQL = sSQL & " WHERE " & sCritere
    Set Rq = m_bd.OpenRecordset(sSQL, dbOpenSnapshot)
    If Rq.EOF Then
        DCount = 0
    Else
        Rq.MoveLast
        DCount = Rq.RecordCount
    End If
    Rq.Close

End Function

Conclusion :


Pour que ca marche, il suffit d'un Private m_bd As Database dans votre module et de l'initialiser, c'est tout !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.