cs_Damfury
Messages postés7Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention15 octobre 2008
-
14 oct. 2008 à 12:45
lillith212
Messages postés1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 juin 2009
-
15 oct. 2008 à 15:41
Bonjour a tous,
Voila j'ai une base donnee avec dans un champ mon nom de fichier partiel. Il faudrait que je recherche ce fichier dans un dossier connu pour ensuite inscrire dans ma table le chemin complet (en vue d'une ouverture depuis un formulaire)
L'insertion dans la table je verrai ca apres pour le moment il faut deja que je reussisse a afficher mon chemin suite a la recherche.
Pour ca j'ai ce code mais je n'arrive pas a recuperer mon chemin:
-Dans un module:
<hr />
Option Compare Database
Private Declare Function SearchTreeForFile _
Lib "imagehlp" (ByVal RootPath As String, _
ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Sub scan(ByVal dossier As Folder, ByVal aTrouver As String)
Dim temp As String
For Each fichier In dossier.Files
If InStr(fichier.Name, aTrouver) > 0 Then
Exit Sub 'quitte ensuite si trouve
End If
Next
For Each sousdossier In dossier.SubFolders
Call scan(sousdossier, aTrouver)
Next
End Sub
<hr />
-Dans ma form:
<hr />Private Sub Command7_Click()
Dim fso As FileSystemObject, dossier As Folder, sousdossier As Folder, fichier As File
Set fso = New FileSystemObject
Set dossier = fso.GetFolder("O:\New OPG Folder\PROJECT RAINBOW_OPG\Technical Data\CBMI")
scan dossier, "LIC-640-N31-101-B"
'---Les API---
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
(ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
'---Les types---
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
'----------------------------------------------
'------Déclarations propres à la fonction------
'----------------------------------------------
Private Type ListeFichier
Fichiers() As WIN32_FIND_DATA
chemin() As String * MAX_PATH
Nombre As Long
End Type
'----------------------------------------------
'------------Variables globales----------------
'----------------------------------------------
Dim rsFic As ADODB.Recordset
Dim Repertoire As String
Dim FichiersRecherchés As String
'****************************************************************
' Initialisation du recordset
'****************************************************************
Private Sub init_Recordset()
Set rsFic = New ADODB.Recordset
rsFic.CursorLocation = adUseClient
rsFic.CursorType = adOpenDynamic
'-- Creation de champ pour la recherche sur les versions precedentes
rsFic.Fields.Append "Nom", adVarChar, 50
rsFic.Fields.Append "Chemin", adVarChar, 255
rsFic.Open
End Sub
'****************************************************************
' Configuration pour le lancement de la recherche
'****************************************************************
Sub LancerLaRecherche_API()
' Alogtihme récursif
'---Déclaration des variables---
Dim ResultatRecherche As ListeFichier
Dim NombreOccurence As Long
Dim i
Dim intI As Integer
Dim tmp As String
init_Recordset
'-- Je récupére le chemin
Repertoire = Frm_Main.chemin1
'--Je récupére le nom du fichier à chercher
FichiersRecherchés = Frm_Main.FichierRec & ".txt"
'---Recherche de tous les fichiers souhaités sur le lecteur prévu---
NombreOccurence = Rechercher(Repertoire, FichiersRecherchés, ResultatRecherche)
' Toutes les informations de la recherche sont dans la variables ResultatRecherche
Select Case ResultatRecherche.Nombre
Case 0
MsgBox "AUCUN FICHIER NE CORRESPOND", vbCritical
Case Else
'-- On récupère le chemin complet ainsi que le nom du fichier recherché
Frm_Main.chemin1 = rsFic!chemin.Value & FichiersRecherchés
End Select
On Error Resume Next
If rsFic.Status = adStateOpen Then rsFic.Close
Set rsFic = Nothing
End Sub
'****************************************************************
' La fonction Rechercher :
' Cette fonction recherche tous les fichiers dans le
' répertoire spécifié et ses sous-repertoires.
' Elle retourne le nombre d'occurences trouvées
'****************************************************************
Private Function Rechercher(chemin As String, FichierR As String, _
ResultatRecherche As ListeFichier) As Long
'---Déclaration des variables---
Dim lpFindFileData As WIN32_FIND_DATA
Dim hFindFile As Long
Dim lgRep As Long
Dim CheminRep As String
Dim NomDuFichier As String
'---Recherche tous les fichiers demandés dans le répertoire Chemin---
hFindFile = FindFirstFile(chemin & FichierR, lpFindFileData)
If hFindFile <> INVALID_HANDLE_VALUE Then
Do
' Mémorise
ResultatRecherche.Nombre = ResultatRecherche.Nombre + 1
ReDim Preserve ResultatRecherche.chemin(1 To ResultatRecherche.Nombre)
ReDim Preserve ResultatRecherche.Fichiers(1 To ResultatRecherche.Nombre)
ResultatRecherche.chemin(ResultatRecherche.Nombre) = chemin
ResultatRecherche.Fichiers(ResultatRecherche.Nombre) = lpFindFileData
NomDuFichier = lpFindFileData.cFileName
'Nettoyage du string renvoyé par l'API
NomDuFichier = Replace(NomDuFichier, Chr(0), "")
NomDuFichier = Trim(NomDuFichier)
'S'il ne s'agit pas du dossier...
If NomDuFichier <> "." And NomDuFichier <> ".." Then
rsFic.AddNew
rsFic!nom.Value = NomDuFichier
rsFic!chemin.Value = chemin
rsFic.Update
rsFic.Sort = "Nom DESC"
End If
' Initialise lpFindFileData (Variable texte uniquement)
lpFindFileData.cAlternate = String$(14, 0)
lpFindFileData.cFileName = String$(MAX_PATH, 0)
Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Recherche dans les sous-répertoires---
hFindFile = FindFirstFile(chemin & "*.*", lpFindFileData)
If (hFindFile <> INVALID_HANDLE_VALUE) Then
Do
' Si c'est un répertoire on continu le recherche
If (lpFindFileData.dwFileAttributes And _
FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
' Extraction du nom du répertoire
CheminRep = Mid$(lpFindFileData.cFileName, 1, _
InStr(1, lpFindFileData.cFileName, Chr$(0)) - 1)
' Attention dans les sous-répertoire aux
' répertoires . et .. (Retour répertoire parent)
If (CheminRep <> ".") And (CheminRep <> "..") Then
CheminRep = chemin & CheminRep & ""
Rechercher = Rechercher(CheminRep, FichierR, ResultatRecherche)
End If
End If
Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Retourne le nombre d'occurrences trouvées---
Rechercher = ResultatRecherche.Nombre
End Function
--> Ce code a été trouvé sur le site de codes sources et adapté à mon besoin...
S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <
lillith212
Messages postés1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 juin 2009 14 oct. 2008 à 15:13
Re:
L'api est quelque chose de très rapide... Maintenant je te propose de tester et ensuite tiens nous informé...
Merci
S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <
cs_Damfury
Messages postés7Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention15 octobre 2008 15 oct. 2008 à 12:02
Bon j'ai change d'optique car apres mure reflexion je me suis rendu compte qu'il etait idiot de vouloir enregistrer le chemin de mon fichier dans ma base alors qu'il ne servira que pour l'ouverture!
J'ai donc insere mon code dans la procedure d'ouverture de mon fichier lors de la consultation.
Seul probleme mon code actuel (celui poste tout en haut) n'est pas tres efficace.
J'ai bien essaye d'utilise celui de lilith mais je n'arrive pas a l'integre.
lillith212
Messages postés1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 juin 2009 15 oct. 2008 à 15:41
Re:
Tu place le code que je t'ai donné dans un module.
Ensuite, tu appelles le module dans ta form...
'-- Je récupére le chemin
Repertoire = Frm_Main.chemin1 --> ma variable chemin1 contient le répertoire ou le disque de recherche
'--Je récupére le nom du fichier à chercher
FichiersRecherchés = Frm_Main.FichierRec & ".txt" --> ma FichierRec contient le nom du fichier à rechercher...
Bon courage
S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <