Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/07/2006, 23h39   #1
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Par défaut [FAQ] [Access 2007] Gestion des pièces jointes en VBA

Access 2007 amène une nouvelle version des recordset : les recordset2 qui sont en fait des sous recordset. Un champ peut maintenant contenir un ensemble d'enregistrement.

La gestion des pièces jointes se fait par un recordset2. Celui ci est décrit ainsi :

Liste des champs : FileData, FileFlags, FileName, FileTimeStamp, FileType, FileUrl

Lors d'un ajout, il suffit de valoriser FileName et appliquer la méthode LoadFromFile

Citation:
Sub list()
Dim orst As DAO.Recordset
Dim orst2 As DAO.Recordset2


Set orst = CurrentDb.OpenRecordset("Table1")
'Ajoute le fichier c:\test.txt
Set orst2 = orst.Fields("PJ").Value
With orst2
.AddNew
.Fields("FileData").LoadFromFile "c:\test.txt"
.Update
End With

End Sub
Soit en plus simple :

Citation:
Sub list()
Dim orst As DAO.Recordset

Set orst = CurrentDb.OpenRecordset("Table1")
'Ajoute le fichier c:\test.txt
With orst.Fields("PJ").Value
.AddNew
.Fields("FileData").LoadFromFile "c:\test.txt"
.Update
End With

End Sub
où le champ PJ contient les pièces jointes
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2006, 23h55   #2
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Quant à la suppression elle est toute aussi facile

Ici je supprime une pièce jointe en fonction du nom

Citation:
Sub supprimerPieceJointe()
Dim orst As DAO.Recordset
Dim bolOk As Boolean

'ofld.SaveToFile
Set orst = CurrentDb.OpenRecordset("Table1")
'Accède à la liste des pièces jointes
With orst.Fields("PJ").Value
'Parcours les PJ
While Not .EOF
'Si la piece se nomme test.txt, on la supprime
If .Fields("FileName") = "test.txt" Then
.Delete
bolOk = True
End If
'On passe au suivant
.MoveNext
Wend
End With

'avertit l'utilisateur
If bolOk Then
MsgBox "Pièces jointes supprimées"
Else
MsgBox "Aucune pièce jointe ne porte ce nom"
End If
End Sub
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2006, 23h56   #3
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
On pourrait aussi décider de supprimer en fonction du type du fichier en l'occurence pour les fichiers textes :

Citation:
Sub supprimerPieceJointe()
Dim orst As DAO.Recordset
Dim bolOk As Boolean

'ofld.SaveToFile
Set orst = CurrentDb.OpenRecordset("Table1")
'Accède à la liste des pièces jointes
With orst.Fields("PJ").Value
'Parcours les PJ
While Not .EOF
'Si la piece est un fichier texte
If .Fields("FileType") = "txt" Then
.Delete
bolOk = True
End If
'On passe au suivant
.MoveNext
Wend
End With

'avertit l'utilisateur
If bolOk Then
MsgBox "Pièces jointes supprimées"
Else
MsgBox "Aucune pièce jointe ne porte ce nom"
End If
End Sub
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 00h00   #4
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Pour la suppression, le mode SQL peut aussi être envisagé :

Citation:
DELETE PJ.Filename
FROM Table1
WHERE PJ.FileType="txt"
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2006, 00h16   #5
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Avec le mode SQL on peut effectuer de nombreux listing tels :

N° est un autre champ de ma table

Lister l'ensemble des enregistrements avec leurs pièces jointes

Citation:
SELECT Table1.[N°], Table1.[PJ].[Value].[FileName] AS Fichier
FROM Table1;
Lister l'ensemble des enregistrements avec leurs pièces jointes en se limitant aux fichiers textes

Citation:
SELECT Table1.[N°], Table1.[PJ].[Value].[FileName] AS Fichier
FROM Table1
WHERE Table1.[PJ].[Value].[FileType]="txt";
Lister les enregistrements possédant au moins une pièce jointe

Citation:
SELECT T.[N°], T.[PJ].[Value].[FileName] AS Fichier
FROM Table1 AS T
WHERE (
SELECT Count(Table1.[PJ].[Value]) FROM Table1 WHERE N°=T.N°
)>0;
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h40.


 
 
 
 
Partenaires

Hébergement Web