IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Mise à jour répétée d'un recordset [Toutes versions]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 151
    Par défaut Mise à jour répétée d'un recordset
    Bonjour à tous,
    j'effectue le parcours d'un document Word contenant des adresses mails et je veux les ajouter à une BDD sans créer de doublons. Pour cela, j'effectue, pour chaque mail, un test de présence dans la BD et si il n'est pas présent je l'ajoute (sinon je ne l'ajoute pas).
    Le problème est que je n'arrive pas à mettre à jour le recordset à chaque fois que j'examine un mail. Comment faire ?
    J'ai essayé de rédéfinir à chaque fois le Recordset, et j'ai essayé aussi les méthodes "Requery", "Update".

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    Public Sub ExportContacts()
        '****************************************************'
        '******************* Déclarations *******************'
        '****************************************************'
        Dim objWApp As Word.Application
        Dim WordDoc As Word.Document
        Dim pCurrentParagraph As Paragraph
        Dim tableauMails As Variant
        Dim currentMail As Variant
     
        Dim rstContacts As DAO.Recordset
        Dim db As DAO.Database 'Base de données sur laquelle se connecter
        Dim nomBD As String 'Nom de la Base de Données
        Dim cheminBDduCdR As String
        Dim sSQL As String 'Requête de sélection
     
        '****************************************************'
        '***************** Initialisations ******************'
        '****************************************************'
        'Pointer sur le document courant
        Set WordDoc = ThisDocument
     
        nomBD = "nobacontakt.mdb"
     
        'Chemin de la BD (dans le même répertoire)
        cheminBDduCdR = ThisDocument.Path & "\" & nomBD
     
        'Connexion à la BD
        Set db = DAO.OpenDatabase(cheminBDduCdR)
     
        '****************************************************'
        '*************** Ajout des contacts *****************'
        '****************************************************'
     
        For Each pCurrentParagraph In WordDoc.Paragraphs
            pCurrentParagraph.Range.Select
            tableauMails = Split(pCurrentParagraph.Range.Text, ";")
     
            For Each currentMail In tableauMails
            currentMail = CStr(Trim(currentMail))
    'Debug.Print currentMail
                If Len(currentMail) > 5 Then
                    If IsMail(Trim(currentMail)) = True Then
                    DoEvents
                    'Rechercher dans la BD le mail courant
                        sSQL = "SELECT Adressedemessagerie FROM Contacts Where Adressedemessagerie=" & """ & Trim(currentMail) & """
     
                        DoEvents
                        Set rstContacts = db.OpenRecordset(sSQL)
                        DoEvents
    Debug.Print rstContacts("Adressedemessagerie")
                        With rstContacts
                           .AddNew
                           !Adressedemessagerie = Trim(currentMail)
                           .Update
                           .Bookmark = .LastModified
                        End With
     
                                'Si l'adresse mail n'est pas déjà présente dans la Base de Contacts
     
                                If (rstContacts.RecordCount = 0) = True Then
                                    'db.Execute "INSERT INTO Contacts (Adressedemessagerie) VALUES ('" & Trim(currentMail) & "')"
                                    DoEvents
    Debug.Print "Started"
                            'Pour chaque mail
                                    Do Until rstContacts.EOF
    Debug.Print "Ajoutéééé"
                                            With rstContacts
                                               .AddNew
                                               !Adressedemessagerie = Trim(currentMail)
                                               .Update
                                               .Bookmark = .LastModified
                                            End With
     
                                        'Réinitialiser la valeur du mail
                                        currentMail = ""
                                        rstContacts.MoveNext
                                    Loop
     
                                End If
     
                    Else
                        'Debug.Print "Pas mail"
                    End If
                Else
                End If
     
            'Réinitialiser la valeur du mail
            currentMail = ""
            DoEvents
            Next currentMail
        Next pCurrentParagraph
     
        'Effacer le contenu du document
        For Each pCurrentParagraph In WordDoc.Paragraphs
            pCurrentParagraph.Range.Select
            pCurrentParagraph.Range.Delete
        Next pCurrentParagraph
     
    End Sub
    Je vous remercie par avance.

  2. #2
    Membre Expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Par défaut
    Bonjour,

    Une solution consiste à utiliser un recordset sur ta table contacts et utiliser la méthode FindFirst.

    QQ chose du genre (non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Set rstContacts = db.OpenRecordset("SELECT Adressedemessagerie FROM Contacts", dbOpenDynaset)
    For Each currentMail In tableauMails
    	currentMail = CStr(Trim(currentMail))
    	If Len(currentMail) > 5 Then
               If IsMail(currentMail) = True Then
     
     
    		With rstContacts
    			.FindFirst "Adressemessagerie ='" & currentMail & "'"
    			if .Nomatch then
    				.AddNew
    					!Adressedemessagerie = currentMail
    				.Update
    			endif
    		End With
                 ENDIF 
    	end if
    Next currentMail

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 151
    Par défaut
    Thanks Mout, je teste tout cela de suite.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 151
    Par défaut
    Je te remercie Mout, ce code fonctionne très bien !!
    Je pose le code fonctionnant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    Public Sub ExportContacts()
        '****************************************************'
        '******************* Déclarations *******************'
        '****************************************************'
        Dim objWApp As Word.Application
        Dim WordDoc As Word.Document
        Dim pCurrentParagraph As Paragraph
        Dim tableauMails As Variant
        Dim currentMail As Variant
     
        Dim rstContacts As DAO.Recordset
        Dim db As DAO.Database 'Base de données sur laquelle se connecter
        Dim nomBD As String 'Nom de la Base de Données
        Dim cheminBDduCdR As String
        Dim sSQL As String 'Requête de sélection
     
        '****************************************************'
        '***************** Initialisations ******************'
        '****************************************************'
        'Pointer sur le document courant
        Set WordDoc = ThisDocument
     
        nomBD = "nobacontakt.mdb"
     
        'Chemin de la BD (dans le même répertoire)
        cheminBDduCdR = ThisDocument.Path & "\" & nomBD
     
        'Se connecter à la BD
        Set db = DAO.OpenDatabase(cheminBDduCdR)
     
        '****************************************************'
        '*************** Ajout des contacts *****************'
        '****************************************************'
        For Each pCurrentParagraph In WordDoc.Paragraphs
            pCurrentParagraph.Range.Select
            tableauMails = Split(pCurrentParagraph.Range.Text, ";")
     
                'Rechercher dans la BD le mail courant
                    DoEvents
                    Set rstContacts = db.OpenRecordset("SELECT Adressedemessagerie FROM Contacts", dbOpenDynaset)
                    For Each currentMail In tableauMails
                        currentMail = CStr(Trim(currentMail))
                        If Len(currentMail) > 5 Then
                               If IsMail(currentMail) = True Then
                                    With rstContacts
                                        .FindFirst "Adressedemessagerie ='" & currentMail & "'"
                                        If .NoMatch Then
                                            .AddNew
                                                !Adressedemessagerie = currentMail
                                            .Update
                                        End If
                                    End With
                                 End If
                        End If
                    'Réinitialiser la valeur du mail
                    currentMail = ""
                    DoEvents
                    Next currentMail
        Next pCurrentParagraph
     
        'Effacer le contenu du document
        For Each pCurrentParagraph In WordDoc.Paragraphs
            pCurrentParagraph.Range.Select
            pCurrentParagraph.Range.Delete
        Next pCurrentParagraph
     
    End Sub

  5. #5
    Membre Expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Par défaut
    de rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher la mise à jour d'un recordset
    Par Daniel MOREAU dans le forum Access
    Réponses: 3
    Dernier message: 28/03/2006, 13h47
  2. Proplème de mise à jour d'un recordset par ADO
    Par maniani dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/01/2006, 19h14
  3. Réponses: 2
    Dernier message: 23/12/2005, 22h32
  4. [vb][ado][mysql] mise à jour d'un recordset
    Par hi_vivie dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 14/12/2005, 16h34
  5. [VB6] Recordset.update et Mise à jour de ma base
    Par badgam piero dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/12/2005, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo