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 :

Comparer enregistrements Table/Fichiers extérieurs


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    bidouilleuse
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleuse
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Comparer enregistrements Table/Fichiers extérieurs
    Bonjour,
    Dans une table de ma base de données, je récupère les "métadonnées" (informations sur les fichiers) des fichiers enregistrés dans certains répertoires.
    Pour cela j'utilise le code recopié ci-dessous (piqué je ne sais plus où, car je suis une piètre bidouilleuse sans formation initiale en programmation) : la première sub étant appelée depuis un bouton de mon formulaire qui opère au préalable une série de vérifications... Ceci fonctionne parfaitement, mais je voudrais maintenant - compléter ce code de façon à ce que ne soient importées que les données des fichiers qui ne sont pas déjà présentes dans ma table. Autrement dit que le système compare - pour un chemin donné - les enregistrements existants dans ma table (le chemin étant enregistré dans le champ "CheminFich") avec l'ensemble des fichiers effectivement présents dans le répertoire ad-hoc.
    Je ne sais comment m'y prendre... Pouvez-vous m'aider ?
    Merci d'avance,


    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
    Sub CompleteMetadon()
     
     Dim ChemRepObjet As String
    ChemRepObjet = "I:\" & Me![Abreviation] & "\" & Me![Refobjet]
    Dim chemRepPhase As String
    chemRepPhase = ChemRepObjet & "\" & "Phase-0" & "\"
    Dim NomRepDossier As String
    NomRepDossier = EnleverAccents(Me![NumFonds]) & "-10000"
    Dim chemRepDossier As String
    chemRepDossier = chemRepPhase & "\" & NomRepDossier & "\"
     
      Set oFSO = CreateObject("Scripting.FileSystemObject")
       sChemin = chemRepDossier
      sTmp = ""
       ComparToutesMeta sChemin, 0
     
        Set oFSO = Nothing
     End Sub
     
     
    Sub ComparToutesMeta(spath As String, Niv As Long)
     
    Dim oDc As Object
    Dim oD As Object
    Dim oF As Object
    Dim copRepName As String
    Dim copRepDateCopie As String 'DateCopie => DateCreated
    Dim copRepDateModif As String 'DateDernModif => DateLastModified
    Dim copRepChemin As String 'CheminFich => Path
    Dim copFichName As String
    Dim copFichDateCopie As String 'DateCopie => DateCreated
    Dim copFichDateModif As String 'DateDernModif => DateLastModified
    Dim copFichChemin As String 'CheminFich => Path
    Dim copFichTaille As String 'TailleFich => Size
    Dim copFichtype As String 'FormatFich => type
     
    If oFSO.FolderExists(spath) Then
        Set oDc = oFSO.GetFolder(spath)
     
        Dim MaBD As Database, MaTable As Recordset
     
        If spath <> sChemin Then
            copRepName = oDc.name
            copRepDateCopie = oDc.DateCreated
            copRepDateModif = oDc.DateLastModified
            copRepChemin = oDc.Path
            Set MaBD = DBEngine.Workspaces(0).Databases(0)
            Set MaTable = MaBD.OpenRecordset("MetadonDescFichiers")
            MaTable.AddNew      ' Crée un nouvel enregistrement directement dans la table
            MaTable("IdFichier") = copRepName
            MaTable("DateCopie") = copRepDateCopie
            MaTable("DateDernModif") = copRepDateModif
            MaTable("CheminFich") = copRepChemin
            MaTable("RefObjLie") = Forms![FmrInvObjMetadon]![RefObjetNum]
            MaTable("RefDosLie") = Forms![FmrInvObjMetadon]![RefDossCopie]
     
            MaTable.Update
            MaTable.Close
        End If
     
        If oDc.files.count > 0 Then
            For Each oF In oDc.files
              copFichName = oF.name
              copFichDateCopie = oF.DateCreated
              copFichDateModif = oF.DateLastModified
              copFichChemin = oF.Path
              copFichTaille = oF.Size
              copFichtype = oF.Type
     
            Set MaBD = DBEngine.Workspaces(0).Databases(0)
            Set MaTable = MaBD.OpenRecordset("MetadonDescFichiers")
            MaTable.AddNew      ' Crée un nouvel enregistrement directement dans la table
            MaTable("IdFichier") = copFichName
            MaTable("DateCopie") = copFichDateCopie
            MaTable("DateDernModif") = copFichDateModif
            MaTable("CheminFich") = copFichChemin
            MaTable("TailleFich") = copFichTaille
            MaTable("FormatFich") = copFichtype
           MaTable("RefObjLie") = Forms![FmrInvObjMetadon]![RefObjetNum]
            MaTable("RefDosLie") = Forms![FmrInvObjMetadon]![RefDossCopie]
            MaTable.Update
            MaTable.Close
            Next
            Set oF = Nothing
        End If
     
        For Each oD In oDc.SubFolders
        ComparToutesMeta spath & "\" & oD.name, Niv + 1
        Next
    End If
    Set oDc = Nothing
    Set oD = Nothing
    Forms![FmrInvObjMetadon]![FmrInvObjMetadonSF].Form.Requery
    End Sub

  2. #2
    Membre du Club
    Femme Profil pro
    bidouilleuse
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleuse
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Nouvelle question liée
    Bonjour,
    Je vois que mon problème ne passionne pas les foules
    Donc de mon côté j'essaye des choses et j'ai pensé intégrer dans le code qui parcourt les fichiers présents sur le serveur une requête qui - au fur et à mesure de ce parcours - vérifie qu'existe, dans ma table des métadonnées, au moins un enregistrement ayant strictement le même "chemin" (y compris nom du fichier). Si ma requête est vide c'est qu'il n'existe pas et j'envoie le code qui créé le nouvel enregistrement...
    Mais - comme je suis toujours une aussi mauvaise programmatrice - je me heurte à l'écriture de cette requête. J'ai un message d'erreur "Trop peu de paramètres...". Sauriez-vous me dire où je me trompe ?
    Merci d'avance,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strSQL = "SELECT ReqInvPhasDossMeta.RefObjPhase, ReqInvPhasDossMeta.cheminFich, ReqInvPhasDossMeta.RefDoss, ReqInvPhasDossMeta.RefPhase, ReqInvPhasDossMeta.cote, ReqInvPhasDossMeta.RefMetad, ReqInvPhasDossMeta.RefObjLie, ReqInvPhasDossMeta.NumOrdrePhase FROM ReqInvPhasDossMeta WHERE (ReqInvPhasDossMeta.RefObjLie) =" & Forms![FmrInvObjMetadon].[RefObjetNum]
    strSQL = strSQL & "And (reqInvPhasDossMeta.Cote) = 10000"
    strSQL = strSQL & "And (reqInvPhasDossMeta.cheminFich) =" & copFichChemin
    Set rsPr = CurrentDb.OpenRecordset(strSQL)

  3. #3
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour gauso,
    Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE (ReqInvPhasDossMeta.RefObjLie) =" & Forms![FmrInvObjMetadon].[RefObjetNum]
    est un champ texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE (ReqInvPhasDossMeta.RefObjLie) ='" & Forms![FmrInvObjMetadon].[RefObjetNum] & "'"
    de plus en supposant un champ numérique pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & "And (reqInvPhasDossMeta.Cote) = 10000"
    devrait se lire (espace devant le And):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & " And (reqInvPhasDossMeta.Cote) = 10000"
    et en supposant un champ texte pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & "And (reqInvPhasDossMeta.cheminFich) =" & copFichChemin
    devrait se lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & " And (reqInvPhasDossMeta.cheminFich) ='" & copFichChemin & "';"
    Bonne journée

  4. #4
    Membre du Club
    Femme Profil pro
    bidouilleuse
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleuse
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Résolu !
    Bonsoir Robert,

    Merci d'abord pour ta réponse
    Entretemps j'avais effectivement trouvé d'où venait le problème et tu l'avais bien identifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & " And (reqInvPhasDossMeta.cheminFich) ='" & copFichChemin & "';"
    Sauf que j'ai écris un peu différemment (et que ça marche aussi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & "AND (reqInvPhasDossMeta.cheminFich)= " & "'" & copFichChemin & "'"
    Pas l'impression que les espaces gênent vraiment (!?) et pourquoi un point-virgule ? le ' va bien en tous les cas.

    Avec ça j'ai réussi à régler mon problème initial et mon code fait exactement ce que je voulais : il vérifie bien la pré-existence d'enregistrements dans ma table avant d'importer les métadonnées des fichiers présents sur le serveur... pas été sans mal, mais ouf !

    Encore merci et bonne soirée,

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

Discussions similaires

  1. Enregistrer un Fichier dans un Table BDE en C++ builder
    Par CostaInf dans le forum C++Builder
    Réponses: 1
    Dernier message: 03/09/2012, 11h53
  2. [WD10] Les bouton de position des enregistrements du fichier dans la table
    Par bestmoroco dans le forum WinDev
    Réponses: 1
    Dernier message: 22/03/2012, 13h39
  3. Réponses: 5
    Dernier message: 07/09/2011, 14h12
  4. Exemple Access enregistrement lien fichier dans table
    Par amely78 dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/06/2011, 22h55
  5. Réponses: 7
    Dernier message: 20/02/2006, 16h18

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