Newsgroup: it.comp.appl.access
Titolo: Cancellare Cartella--SottoCartella--Files

Ciao.
La domanda è banale, ma cercavo un metodo per ottenere quanto in oggetto
senza dover ciclare con il contenuto delle cartelle.
Ho letto da qualche parte che si può usare l'API che viene gestita dal
Cestino
dalla Dll Shell32, ma non sono riuscito a trovare nessun esempio....!
Questo mi permetterebbe di simulare il Cancella del cestino, senza
preoccuparmi
di controllare nulla nelle Folders....!
Ciao.
Grazie.
@Alex.

 ha scritto nel messaggio
news:bptpjn$3ai$1...@lacerta.tiscalinet.it...

Trovato Grazie ugualmente.
La funzione non è ben documentata nemmeno su AllAPI guide
e non sono riuscito a togliere il messaggio di dialogo...!
Se qualcuno ha INFO a riguardo....
Lo posto se può interessare......!
Mettere il codice seguente in un Modulo:
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
   If Mid$(sFile, Len(sFile), 1) = "\" Then sFile = Mid$(sFile, 1,
Len(sFile) - 1)
   sFile = sFile & vbNullChar & vbNullChar
   With shf
      .wFunc = FO_DELETE  'action to perform
      .pFrom = sFile      'the file to act on
      .fFlags = FOF_FLAGS 'special flags
   End With
   Call SHFileOperation(shf)
   ShellDelete = True
   Exit Function
Err_Delete:
   ShellDelete = False
End Function
Ciao.
@Alex.

 ha scritto nel messaggio
news:bptre7$6oj$1...@lacerta.tiscalinet.it...

Avevi già provato con FileSystemObject?
Se ho capito bene volevi cancellare una dir a prescindere dal contenuto, no?
Se è così prova con:
'------- help Windows Script -----
Il metodo DeleteFolder non distingue le cartelle che contengono dati e le
cartelle vuote. La cartella specificata verrà eliminata indipendentemente
dal fatto che contenga dati o meno.
Ciao.
--
Sergio MAZZA

 > senza dover ciclare con il contenuto delle cartelle.
[CUT]
Ciao @Alex
Qualcosa di piů semplice
-----------------------------
Sub CancellaDir()
   On Local Error GoTo Errore
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder("C:\CartelladaCancellare")
   ' True indica la che verranno cancellati
   ' anche i file e cartelle con attributo read only
   f.Delete True
Fine:
   Set f = Nothing
   Set fso = Nothing
   Exit Sub
Errore:
   MsgBox Error
   Resume Fine
End Sub
-----------------------------
Ciao Giorgio
Ciao Giorgio

 Ciao Giorgio
In effetti ho fatto anche una cosa simile e funziona, o meglio
mi da gli stessi errori che mi da API e Shell32.
(Credo che il probema però sia nel fatto che il mio BE
ha ancora qualche legame o LINKS attivo nelle SubFolder,
e questo è un'altra questione).
L'unico inghippo è che con questo sistema devo essere sicuro
che sia installato lo ScriptingHosting
....!
Sub DeleteFolder(FolderPath As String)
    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFolder FolderPath
    Set fs = Nothing
End Sub
Le cose semplice non mi piacciono...!
Ciao.
Grazie come al solito...!
Alessandro.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Sergio MAZZA
Sub DeleteFolder(FolderPath As String)
    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFolder FolderPath
    Set fs = Nothing
End Sub
Funziona correttamente a parte il fatto di ricevere
un'errore legato ad un probabile legame tra FE e SubFolder
che no riesco a intercettare...!
Lo stesso errore lo da anche con le Shell32.
@ALex.


 Le cose semplice non mi piacciono...!
Sono d'accordo, mai limitarsi  :-)
Ciao
Giorgio


Di quale legame parli? Hai provato a forzare la cancellazione:
fs.DeleteFolder FolderPath, True?
Ciao.
--
Sergio MAZZA

 Sergio MAZZA
No, ma lo fò subbito....!
Come faccio se sul PC non è installato, almeno a rilevarlo....?
Ciao Grazie.
@ALex.


Ho provato, ma nulla da fare....!
Il fatto è che realizzo la Gestione di BE in differenti Cartelle(supponiamo
potrebbe essere
una Rete).
Quando ho attivo un BE, non dò la disponibilità ad eliminarlo, allora
scambio BE, e non cambio
la connection della TAbella, ma la CANCELLO ed IMPORTO dal Nuovo BE in
modalità
LINK...!
Lo strano è che anche la Sub con lo Scripting mi cancella correttamente
tutto il Contenuto,
quando mi dee cancellare la Cartella  mi dà errore.
Allora ho provato a rimuoverla a mano, ma non si può cancellare.
Se chiudo la Form del FE allora cancello la Cartella.
Non capisco cosa rimanga di legato alla Cartella dal momento che elimino la
LinkedTable
eseguo il Requery della Form.....!
Se chiudo e riapro la Form poi cancello il tutto non dà errore.
E' possibile quindi che in realtà il solo Requery non basti....????
Non ce ne vado fuori....!
@Alex.


Forse la cartella da cancellare è la risorsa mappata? Se è così prova a
mappare la cartella "padre" e i collegamenti li fai attraverso la risorsa ma
dentro una sottocartella... Mi sono capito?
Ciao.
--
Sergio MAZZA

 Sergio MAZZA
Mi auguro che tu ti sia capito....!!!
Io perň mi sono perso dopo il punto di domanda.....!!!
Ciao.
@Alex.

 @Alex.
Facciamo un esempio:
- Server: cartella condivisa c:\dati;
- Client: mappa la risorsa \\Server\dati e diventa (es.) F:\
Se da un altro Client provi ad eliminare c:\dati forse ti restituisce un
errore perché, la directory (uff! Cartella) è direttamente coinvolta.
(alternativa)
- Server: cartella condivisa c:\documenti, al suo interno c'è l'altra
cartella dati (c:\documenti\dati)
- Client: mappa la risorsa \\Server\documenti e diventa (es.) F:\
- L'mdb FE ha il percorso puntato alla risorsa mappata (F:) più la cartella
dati: F:\dati;
in teoria "dati" la potresti cancellare perché non direttamente coinvolta...
Come sono andato?
Ciao.
--
Sergio MAZZA

 Sergio MAZZA
Ottimo, ed è vero, provato pure, ma il mio caso rompe ancora perchè
seguendo il tuo esempio devo cancellare anche Documenti....!
Ora mi elimina il contenuto di Dati, ma non Dati, ma se provo ad eliminare
a mano Dati si cancella, quello che non cancello nemmeno a mano è Documenti.
Di conseguenza mi rimande Server\Documenti\Dati con nulla dentro....!
Se chiudo, quindi libero la mappatura del Server, voilà si cancella
tutto....!(quello che
è rimasto)...!
Lo strano però è che via codice ho già switchato il BE su un'altro Client e
funziona
dove caiser mappa, e soprattutto perchè, il vecchio BE.....???
@Alex.


Mi viene da suggerirti: disconnetti (dal Server) la risorsa così la puoi
cancellare. Però ora non capisco più se agisci lato server o client (diverso
da quello con l'Fe riallegato). Comunque potresti crearti uno script (sul
server) che disconnette la risorsa e la cancella...
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:bq6vlt$1gq$1...@canarie.caspur.it...

Per disconnettere l'unità condivisa dal client
dim net as object
set net = createobject("Wscript.network")
net.removenetworkdrive "I:"
set net = nothing
L'ho presa da una risposta di Giorgio Prx
MAssimiliano

 Sergio MAZZA
E' un pò come al Circo....:
"Venite signori più gente entra più bestie si vedono....!!!" diceva
l'uomo all'ingresso...!
Quando dici sconnetiti dal Server cosa intendi...!
Ti accennavo che per eliminare tutto l'ambaradan, cancello
persino la LinkedTable(è 1 sola nel mio caso)
Elimino persino l'origine Dati su una ListBox per sicurezza.
Io più sconnesso di così non saprei che fare.
Ma il bello è che lo fà anche se mi sono riconnesso ad un'altro
Server...!
Mah....
@Alex. 


 @Alex.
Ciao.
--
Sergio MAZZA

 MAssimiliano
Bene, ora provo così...!
Merci.
@Alex.
