web-dev-qa-db-fra.com

Trouver la partie répertoire (moins le nom de fichier) d'un chemin d'accès complet dans Access 97

Pour diverses raisons, je suis bloqué dans Access 97 et j'ai besoin d'obtenir uniquement la partie chemin d'accès d'un chemin d'accès complet.

Par exemple, le nom

c:\whatever dir\another dir\stuff.mdb

devraient devenir

c:\whatever dir\another dir\

Ce site a quelques suggestions sur la façon de le faire: http://www.ammara.com/access_image_faq/parse_path_filename.html

Mais ils semblent plutôt hideux. Il doit y avoir une meilleure façon, non?

23
apenwarr

C'est à peu près ça. Il n'y a pas de fonction magique intégrée ...

3
DJ.

Vous pouvez faire quelque chose de simple comme: Left(path, InStrRev(path, "\"))

Exemple:

Function GetDirectory(path)
   GetDirectory = Left(path, InStrRev(path, "\"))
End Function
38
Makah

J'ai toujours utilisé le FileSystemObject pour ce genre de chose. Voici une petite fonction wrapper que j'ai utilisée. Assurez-vous de référencer le Microsoft Scripting Runtime.

Function StripFilename(sPathFile As String) As String

'given a full path and file, strip the filename off the end and return the path

Dim filesystem As New FileSystemObject

StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"

Exit Function

End Function
19
John Mo

Cela semble fonctionner. Ce qui précède n'est pas dans Excel 2010.

Function StripFilename(sPathFile As String) As String
'given a full path and file, strip the filename off the end and return the path
Dim filesystem As Object

Set filesystem = CreateObject("Scripting.FilesystemObject")

StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"

Exit Function

End Function
10
Jeff Stander

gauche (currentdb.Name, instr (1, currentdb.Name, dir (currentdb.Name)) - 1)

La fonction Dir renverra uniquement la partie fichier du chemin complet. Currentdb.Name est utilisé ici, mais il peut s'agir de n'importe quelle chaîne de chemin d'accès complète.

1
Dick Kusleika

Si vous avez juste besoin du chemin de la MDB actuellement ouverte dans l'interface utilisateur Access, je suggère d'écrire une fonction qui analyse CurrentDB.Name puis stocke le résultat dans une variable statique à l'intérieur de la fonction. Quelque chose comme ça:

Public Function CurrentPath() As String
  Dim strCurrentDBName As String
  Static strPath As String
  Dim i As Integer

  If Len(strPath) = 0 Then
     strCurrentDBName = CurrentDb.Name
     For i = Len(strCurrentDBName) To 1 Step -1
       If Mid(strCurrentDBName, i, 1) = "\" Then
          strPath = Left(strCurrentDBName, i)
          Exit For
       End If
    Next
  End If
  CurrentPath = strPath
End Function

Cela présente l'avantage de ne parcourir le nom qu'une seule fois.

Bien sûr, cela ne fonctionne qu'avec le fichier ouvert dans l'interface utilisateur.

Une autre façon d'écrire cela serait d'utiliser les fonctions fournies dans link à l'intérieur de la fonction ci-dessus, donc:

Public Function CurrentPath() As String
  Static strPath As String

  If Len(strPath) = 0 Then
     strPath = FolderFromPath(CurrentDB.Name)
  End If
  CurrentPath = strPath
End Function

Cela rend la récupération du chemin actuel très efficace tout en utilisant du code qui peut être utilisé pour trouver le chemin pour n'importe quel nom de fichier/chemin.

1
David-W-Fenton

Essayez cette fonction:

Fonction FolderPath (FilePath As String) As String 
 
 '------------------------------ -------------------- 
 'Renvoie le chemin du dossier à partir du chemin du fichier. 
 
' Écrit par: Christos Samaras 
 'Date: 06/11/2013 
' ------------------------------ -------------------- 
 
 Dim FileName As String 
 
 Avec WorksheetFunction 
 FileName = Mid (FilePath, .Find ("*", .Substitute (FilePath, "\", "*", Len (FilePath) - _ 
 Len (.Substitute (FilePath, "\", ") ")))) + 1, Len (FilePath)) 
 Terminer par 
 
 FolderPath = Left (FilePath, Len (FilePath) - Len (FileName) - 1) 
 
 Fin de fonction

Si vous ne souhaitez pas supprimer la dernière barre oblique inverse "\" à la fin du chemin d'accès au dossier, modifiez la dernière ligne avec ceci:

FolderPath = Left (FilePath, Len (FilePath) - Len (FileName))

Exemple:

FolderPath("C:\Users\Christos\Desktop\LAT Analysers Signal Correction\1\TP 14_03_2013_5.csv")

donne:

C:\Users\Christos\Desktop\LAT Analyzers Signal Correction\1

ou

C:\Users\Christos\Desktop\LAT Analyzers Signal Correction\1 \

dans le second cas (notez qu'il y a une barre oblique inversée à la fin).

J'espère que ça aide ...

0
Sam

vFilename = "C:\Informes\Indicadores\Program\Ind_Cont_PRv.txt"

vDirFile = Remplacer (vFilename, Dir (vFileName, vbDirectory), "")

'Résultat = C:\Informes\Indicadores_Contraloria\Programa\Versiones anteriores \

0
AlexFreyre