| auteur :Christophe Warin |
Pour ajouter un fichier, il faut utiliser la méthode LoadFromFile des objets
Field2 de DAO. Cette méthode est applicable au champ FileData d'une pièce-jointe.
Exemple :
Function AjouterFichier(strchemin As String, inteleve As Integer) As Boolean
On Error GoTo err
Dim oRst As DAO.Recordset
Set oRst = CurrentDb.OpenRecordset("SELECT Fichiers FROM tbl_eleve WHERE [N°]=" & inteleve)
With oRst.Fields(0).Value
.AddNew
.Fields("FileData").LoadFromFile strchemin
.Update
End With
AjouterFichier = True
fin:
Set oRst = Nothing
Exit Function
err:
Select Case err.Number
Case 3024:
MsgBox "Fichier inexistant", vbCritical
Case 3820:
MsgBox "Une autre pièce-jointe de ce nom existe déjà", vbCritical
Case Else:
MsgBox "Erreur inconnue", vbCritical
End Select
Resume fin
End Function |
|
| auteur :Christophe Warin |
Pour créer un champ pièce-jointe dans une table en VBA,
vous pouvez utiliser DAO et la méthode CreateField.
Dans ce cas, le type du champ sera : dbAttachment.
Sub creerChampPieceJointe()
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
Set oTbl = oDb.TableDefs("TableClient")
With oTbl
.Fields.Append .CreateField("PhotoClient", dbAttachment)
End With
End Sub |
|
| auteur :Christophe Warin |
Pour ouvrir une pièce-jointe, il faut procéder en deux étapes :
- Enregistrer la pièce-jointe dans un fichier temporaire
- Ouvrir le fichier
Pour l'enregistrement, je vous renvoie vers la question : Comment sauvegarder une pièce-jointe dans un fichier en VBA ?
Pour l'ouverture, vous pouvez utiliser l'API ShellExecute.
Dans l'entête d'un module :
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long |
Puis dans votre code (après l'enregistrement du fichier) :
ShellExecute Me.hwnd, "open", strchemin, "", CurrentProject.Path, 1 |
Où strChemin est le nom du fichier.
|
lien : Comment sauvegarder une pièce-jointe dans un fichier en VBA ?
|
| auteur :Christophe Warin |
La méthode SaveToFile des objets Field2 de DAO permet d'enregistrer une pièce-jointe
dans un fichier dont le nom est passé en paramètre.
Il suffit de l'appliquer sur le champ FileData issu du champ pièce-jointe.
Dans l'exemple ci-dessous, le champ Fichier est un champ de type pièce-jointe.
Function EnregistrerFichier(strNomFichier As String, inteleve As Integer, strNomDestination) As Boolean
On Error GoTo err
Dim oRst As DAO.Recordset
Set oRst = CurrentDb.OpenRecordset("SELECT Fichiers.FileData FROM tbl_eleve WHERE [N°]=" & _
inteleve & " AND Fichiers.FileName=" & Chr(34) & strNomFichier & Chr(34))
If Not oRst.EOF Then
oRst.Fields(0).SaveToFile strNomDestination
EnregistrerFichier = True
End If
fin:
Set oRst = Nothing
Exit Function
err:
Select Case err.Number
Case 3839:
MsgBox "Impossible d'écraser le fichier", vbCritical
Case Else
MsgBox "Erreur inconnue", vbCritical
End Select
Resume fin
End Function |
Utilisation :
La ligne suivante sauvegarde la pièce-jointe photo.jpg de l'élève n° 2 dans le fichier c:\essai.jpg
EnregistrerFichier "photo.jpg", 2, "c:\essai.jpg" |
|
| auteur :Christophe Warin |
Lorsqu'un champ est de type pièces-jointes, la valeur de sa propriété Type
avec DAO est égale à dbAttachment (101).
Dim odb As DAO.Database
Dim otbl As DAO.TableDef
Set odb = CurrentDb
Set otbl = odb.TableDefs("Table1")
If otbl.Fields(0).Type = dbAttachment Then
MsgBox "Champ de type Pièces-Jointes"
End If |
|
| auteur :Christophe Warin |
En fait c'est trés simple, il suffit de rechercher les fichiers dont
l'extension correspond à celle désirée puis supprimer les éléments trouvés.
Exemple :
Dim oRst As DAO.Recordset
Set oRst = CurrentDb.OpenRecordset("SELECT * FROM tblClient WHERE Num=1")
With oRst.Fields("Photo").Value
.FindFirst "FileType='txt'"
While Not .NoMatch
.Delete
.FindNext "FileType='txt'"
Wend
End With |
|
lien : Comment lister les extensions des fichiers en SQL ?
|
Consultez les autres F.A.Q's
|
|