begin process at 2012 02 17 03:44:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de Donnees

 > LES FONCTIONS DCOUNT, DLOOKUP ET DSUM D'ACCESS EN VB6

LES FONCTIONS DCOUNT, DLOOKUP ET DSUM D'ACCESS EN VB6


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de Donnees Niveau :Débutant Date de création :01/07/2004 Vu :10 877

Auteur : Patrice99

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


 Description

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

Source

  • 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
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 !


 Sources du même auteur

Source avec Zip FREEBOOK : MODELE ET MACRO WORD EBOOK POUR LES LISEUSES ELEC...
Source avec Zip Source avec une capture Source .NET (Dotnet) VBFILEFIND : RECHERCHE DE FICHIERS POUR REMPLACER CELLE DE W...
Source avec Zip Source avec une capture Source .NET (Dotnet) VBWINDIFF : INTERFACE D'OPTIONS POUR LE COMPARATEUR WINDIFF
Source avec Zip Source .NET (Dotnet) VBEXCELLIBRARY : LIRE RAPIDEMENT UN CLASSEUR EXCEL SANS EXCE...
Source avec Zip Source .NET (Dotnet) CRÉER UN VRAI OCX EN DOTNET

 Sources de la même categorie

Source avec Zip Source avec une capture BIEN ADMINISTRER LES ETUDIANTS ET LEURS CÔTES par okosa
Source avec Zip VBA EXEL GESTION DE PERSONEL NOUVEAU CONTRAT DE TRAVAI par oudlarbi
Source avec Zip Source avec une capture CREATION D'UN OBJET D'ACCÈS AUX DONNÉES par okosa
Source avec Zip Source .NET (Dotnet) MISAHORAIRE par MdelM
Source avec Zip Source avec une capture BASEDEDONNEES,GESTIONDEMALADES,DATABASSE par shadkitenge

Commentaires et avis

Commentaire de Patrice99 le 01/07/2004 13:58:51

Et voici comment ouvrir simplement la base :

DBEngine.SystemDB = ""
Dim Session As Workspace
Set Session = DBEngine.Workspaces(0)
Set m_bd = Session.OpenDatabase(sCheminBD)

Commentaire de Patrice99 le 16/08/2004 09:37:18

Version en VB .Net :

ACCESSTOVB7 : LES FONCTIONS DCOUNT, DLOOKUP ET DSUM D'ACCESS EN VB7
www.vbfrance.com/code.aspx?ID=25408

Commentaire de mymym le 31/05/2005 09:33:38

bonjour, voila j ai un probleme je ne sais pas ecrire un code vb et je nai pas d autre solution il me faut absolument du vb pour ma bd access,
je dois pouvoir afficher un numero de client dans mon formulaire de saisie mais pour ce faire il faut que en rentrant les coordonnee du client (nom/prenom/code postal) ca puisse chercher ds ma base si le client existe et dc me donner son numero sinon lui cree un nouveau numero
je crois que pour ca il faut utiliser les fonction
-Dcount pour compter les client
- si >0 faire un OpenRecordset pour chercher si le client existe
- sinon Docmd.RunSQL("insert...) pour en cree un

on ma dit d utiliser ces fonction mais je capte rien merci de votre aide

Commentaire de Patrice99 le 31/05/2005 09:51:12

Je pense qu'un DLookUp devrait le faire, avec pour critère : "nom='" & N & "' And prenom='" & P & "' And [code postal]='" & CP & "'"
Autre solution : ouvre un Recordset, fait un .FindFirst avec ces memes critères, si .NoMatch alors .AddNew et sinon .Edit

Commentaire de mymym le 31/05/2005 10:01:04

merci de ta reponse mais la tu parle a une inculte du vb j ai rien compris, je n arirve meme pas a declarer des variable...lol
explique moi de quoi tu parle???
merci

Commentaire de Patrice99 le 31/05/2005 10:56:13

http://access.developpez.com/faq/?page=Generalites#Tutoriels

Commentaire de mymym le 31/05/2005 11:09:15

merci j ai tout fait je suis allee partout donc aussi a cette adresse et ca ne ma pas trop aidé ....:-(
ya pas qqun qui pourrait m expliqu ai comment on fait un code vb????
merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales