Newsgroup: it.comp.appl.access
Titolo: cancella cartelle

sto tentando di utilizzare le due funzioni trovate sul sito comune (5.66) 
per la cancellazione delle cartelle, ma sia la cancellazione della cartella, 
che quella dei file non mi cancellano le sottocartelle per cui poi mi danno 
un errore, come posso fare per utilizzare una delle due funzioni in modo che 
mi cancelli tutta la cartella?
di seguito per chi avesse difficolt� vederle sul sito le due funzioni
Public Sub DeleteDir(DirPath As String)
   On Error GoTo error
       RmDir DirPath$
Exit Sub
error:     MsgBox Err.Description, vbExclamation, "Error"
End SubPublic Sub DelFilesInDir(DirPath As String, DelDir As Boolean)
   On Error GoTo error
   Kill DirPath$ & "\*.*"
Del_Dir:
   If DelDir = True Then
      RmDir DirPath$
   End If
   Exit Sub
error:
   If Err.Number = 53 Then Resume Del_Dir
   MsgBox Err.Number & " " & Err.Description, vbExclamation, "Error"
End Sub
grazie e ciao
Max 

max ha scritto:

Prova cos�
  shell "cmd.exe /c rmdir /S /Q """ & DirPath & """"
Attenzione, non chiede conferme!
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


l'obiettivo era proprio quello di evitare il dos, mi sembra che quando 
utilizzo il dos i comandi siano estremamente più lenti,
anche se l'altro lato della medaglia è che quando lancio le funzioni 
direttametne da access utilizzando o meno le api il pc sembra quasi freezato 
mentre utilizzando il dos ciò non avviene almeno non in maniera cosi 
evidente, è corretto quello che sto suppendo?
ciao
Max 

 Max
Non lo so, ci potrebbero essere mille motivi, bisognerebbe indagare.
Resta il fatto che questo discorso prestazionale ha senso quando hai
diverse alternative per ottenere il risultato.
In questo caso in VBA non c'è un comando che fa quello che vuoi, per cui,
veloce o meno veloce, devi usare Shell. O inventarti qualche altro sistema.



ok grazie, continuer� ad usare un file bat richiamato dalla form, anche se 
ho trovato questo codice sul sito comine che utilizza le api, funziona ma io 
vorrei che non chiedesse all'utente di cancellare la cartella e poi fosse 
"trasparente" (non visualizzare la finestra di cancellazione... lo posto di 
seguito se qualcuno � in grado di dirmi come modificarlo gliene sono grato
Option Compare Database
Option Explicit
Private Type SHFILEOPSTRUCT
   hWnd        As Long
   wFunc       As Long
   pFrom       As String
   pTo         As String
   fFlags      As Integer
   fAborted    As Boolean
   hNameMaps   As Long
   sProgress   As String
 End Type
Public Const FO_DELETE As Long = &H3
Public Const FOF_ALLOWUNDO As Long = &H40
Private Declare Function SHFileOperation Lib "shell32" _
   Alias "SHFileOperationA" _
  (lpFileOp As SHFILEOPSTRUCT) As Long
Public Function ShellDelete(sFile As String, Optional FOF_FLAGS As Long = 
FO_DELETE) As Boolean
   On Error GoTo Err_Delete
   Dim shf As SHFILEOPSTRUCT
   Dim lngMsg As Long
   'Rimuove il terminatore di stringa "\" inserendo
   '2 caratteri nulli
   If Mid$(sFile, Len(sFile), 1) = "\" Then sFile = Mid$(sFile, 1, 
Len(sFile) - 1)
   sFile = sFile & vbNullChar & vbNullChar
   'Imposta la variabile da passare alla funzione API
   'per la cancellazione
   With shf
      .wFunc = FO_DELETE  'Tipo di azione da eseguire
      .pFrom = sFile      'File/Folder sulla quale eseguirla
      .fFlags = FOF_FLAGS 'Flags speciali(come FOF_ALLOWUNDO)
   End With
   'Esegue l'istruzione e ne recupera l'esito
   'la variabile � passata ByRef e viene completata
   Call SHFileOperation(shf)
   ShellDelete = Not shf.fAborted
   Exit Function
Err_Delete:
   ShellDelete = False
End FunctionciaoMax