Newsgroup: it.comp.appl.access
Titolo: creare dir da eseguibili e importare txt in mdb

buonasera a tutto il NG ! e scusate la lunghezza.....
ho 10 file eseguibili (.exe) ciascuno di questi scompattato genera 8 tabelle 
in formato txt (di ognuna ho le specifiche di importazione)
Vorrei che mi poteste aiutare a relizzare questo risultato :
Ora i files .exe sono tutti  in una directory chiamata export, e vorrei che 
si potesse creare 1 dir (con un nome predeterminato) per ogni file .exe e 
successivamente scompattarli e, utilizzando le, specifiche di importazione 
importare le relative tabelle in un MDB.
sono in grado di realizzare una dir (sic...) e spostare il file relativo, ma 
un operazione come sopra descritto mi risulta assai ostica, prealtro con uno 
script VBS, sempre su un solo file, riesco ad eseguire la scompattazione ma 
il guaio è che i file scompattati vanno a finire in una directory 
(Documenti) che non è quella che io vorrei.
Esempi di codice utilizzato :
Lettura dei files nella directory ......
Private Sub Comando0_Click()
   ' d=directory
   ' j=maschera di match
   Dim t As TableDef
   Dim r As Recordset
   Dim s As String
   If d = "" Then d = "C:\export\DATA\" ' se non specificata usa la dir 
corrente"
   If j = "" Then j = "*.exe" ' se non specificato, lista tutti i file
   If Right(d, 1) <> "\" Then d = d & "\"
   s = "Files presenti in " & d
   Set t = CurrentDb.CreateTableDef(s)
   t.Fields.Append t.CreateField("NomeFile", dbText)
   CurrentDb.TableDefs.Append t
   Set r = CurrentDb.OpenRecordset(s, dbOpenTable)
   s = Dir(d & j)
   With r
      Do While s <> "" ' cicla per ogni file nella directory
         .AddNew
         !NomeFile = s
         s = Dir
         .Update
      Loop
   End With
End Sub
creazione directory....
Private Sub Comando1_Click()
      MakeDir = False
      MkDir "C:\prova1"
      MkDir "C:\prova2"
      MkDir "C:\prova3"
      MakeDir = True
End Sub
esecuzione del file di scompattazione....
Private Sub Comando3_Click()
Dim Percorso As String, windowstyle As Integer, Attendi As Boolean
   Dim wshell As Object
   Set wshell = CreateObject("WScript.shell")
   wshell.Run "C:\import\esegui_scompattazione.vbs", windowstyle, Attendi
   Set wshell = Nothing
End Sub
Spostamento dei file .....(ho creato una tabella DATA con un campo dove ho 
la path di origine e uno con la destinazione)
Dim fso As New FileSystemObject
Dim fls As Scripting.File
Dim ImmagineP As String, ImmagineA As String
Dim FolderP As String, FolderA As String
'Folder di Partenza ed Arrivo delle immagini
FolderP = "C:\Documents and Settings\Celli\Documenti"
FolderA = "C:\Import\"
'Collegamento al Data Base
Dim cn As New ADODB.Connection
cn.Open CurrentProject.Connection
Dim rs As New ADODB.Recordset
rs.Open "DATA", cn, adOpenStatic, adLockOptimistic
Dim i As Integer
rs.MoveFirst
For i = 1 To rs.RecordCount
    ImmagineP = rs("path").Value
    ImmagineA = rs("destinazione").Value
    For Each fls In fso.GetFolder(FolderP).Files
        If ImmagineP = fls.Name Then
            fso.CopyFile FolderP & ImmagineP, FolderA & ImmagineA, True
            rs("Conferma").Value = ImmagineP
        End If
    Next
    rs.MoveNext
Next
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
Come vedete sono tutte cose "al singolare" ma nulla mi aiutano nel 
realizzare quanto sopra esposto.
Spero come sempre nella vostra inestimabile collaborazione per poter 
arrivare al risultato....che ....vorrei..
Grazie come sempre !
Paolo 

 ha scritto nel messaggio news:qHRfi.22392$y05....@tornado.fastwebnet.it...

A me sembra che nella tua cassetta degli attrezzi ci siano tutti gli strumenti.
Secondo me le operazioni da fare potrebbero essere:
- creare una directory temporanea (C:\temp);
- copiarci gli exe
1 - ciclo di lettura del nome ed esecuzione del file exe
1.1 - eseguire il file exe attendendo la fine
1.2 - copiare/spostare dalla cartella predefinita dove vengono estratti i file (tanto ai detto che si sa) nella cartella C:\Import
1.3 - ciclo di lettura del nome ed importazione del file txt
1.4 -- (se necessario) eliminazione del file txt già importato
2 - ritorno al punto 1 (prosecuzione del ciclo)
Devi solo riassemblare le routine che hai in modo tale da effettuare le operazioni; aggiungo che sul sito comune (volendo) trovi 
altri esempi di codice per ottenere il nome dei file presenti in una cartella...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ciao Sergio e grazie per la risposta purtroppo letta in ritardo causa 
trasferta lavorativa,
Concordo su cio he esponi per realizzare il tutto ma da inespeeto vorrei che 
gentilmente mi potessi fare un esempio anche generico della costruzione di 
un ciclo in modo che io possa sempre utilizzarlo,
Mi sarebbe utile per capire dato che magari ho vicino la concezione delle 
cose ma mi manca la costruzione
Ti sarei molto grato
Grazie e buona giornata
Paolo 

 Paolo
Mancano delle informazioni per completare il puzzle.
Prendo come punto fisso:
- che gli exe zippati vengano salvati in: C:\documenti; poi tu la cambi.
- che esegui la scompattazione un file alla volta, non tutti insieme; quindi 
dovrai indicarmi il contenuto dello script "esegui_scompattazione.vbs" per 
inserirlo nella parte del codice relativa.
Questa subroutine da inserire in un modulo deve essere completata con altre 
informazioni:
'---
Sub eseguiAzionePerOgniFile(cartella as string, tipofileDaTrovare As String, 
azione as String)
dim fileDaTrovare As String
If Right(cartella, 1) <> "\" Then '<-- il percorso deve terminare con il 
backslash
    cartella = cartella & "\"
End If
fileDaTrovare = cartella & tipofileDaTrovare
If Dir(fileDaTrovare) = "" Then '<-- verifica esistenza file
    MsgBox "File: " & fileDaTrovare & ", (non presenti)"
    Exit Sub
End If
fileDaTrovare = Dir(fileDaTrovare)
Do While fileDaTrovare <> "" '<-- per ogni file
Select case azione '<-- esegui l'azione indicata
    case "scompatta"
        Dim objAct
        Set objAct = CreateObject("WScript.Shell")
        objAct.Run cartella & fileDaTrovare <'-- eseguo exe che scompatta in 
c:\documenti
        '<-- qui dovresti o rinominare l'exe o cancellarlo (a te la scelta) 
per non riprenderlo
        '<-- in considerazione
    case "importa"
        '<-- qui ci inserisci il codice che importa il file (scompattato) 
indicato nelle variabili
        '<--  cartella & fileDaTrovare
    case "eliminaImportati"
        Dim objAct
        Set objAct = CreateObject("Scripting.FileSystemObject")
        objAct.DeleteFile(cartella & fileDaTrovare)
    case else
Loop
if isobject(objAct) then
    Set objAct = Nothing
end if
exit sub
errori:
    Set objAct = Nothing
    msgbox err.number & " " & application.accesserror(err.number)
end sub
'---
I passi da seguire, (es.) in un clic di un bottone, sono:
eseguiAzionePerOgniFile "c:\export\", "*.exe", "scompatta"
eseguiAzionePerOgniFile "c:\documenti\", "*.txt", "importa"
eseguiAzionePerOgniFile "c:\documenti\", "*.txt", "eliminaImportati"
Il codice è da completare(come ho già scritto) e quindi da testare...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:f5t83i$fo2$1...@tdi.cu.mi.it...

Sergio, rieccomi qui dopo un'ennesima lunga giornata....
ho letto con attenzione la tua risposta cercando di comprendere al meglio lo 
svolgimento che mi proponi e, nei miei limiti, ho capito che sarebbe la 
soluzione che andrebbe bene per me.
Mi hai chiesto il contenuto dello script di scompattazione ...eccolo ..
Dim oWshShell
Set oWshShell = CreateObject("WScript.Shell")
oWshShell.Run  "C:\import\001.exe"
Set oWshShell = Nothing
funziona (anche se non trovo verso di fargli cambiare destinazione cosi 
eviterei di spostare i file scompattati....)
Ho provato a seguire una logica su un singolo file anche oggi e li direi che 
ci siamo abbastanza ma per quanto riguarda la costruzione di cicli adatti ne 
sono lontano......
Se non ho capito male la tua soluzione prevede di, con un solo click, di 
effettuare l'intera operazione, creazioene dele directory scompattazione e 
importazione in mdb.... e non sa quanto sarebbe utile per me.
Ti chiedo e anche al NG di potermi dare una mano in proposito....
Come sempre ringrazio in anticipo con la buona serata
Paolo

 Paolo
Quindi il codice nel case "scompatta" è giusto.
Devi decidere cosa fare nei punti che ti ho indicato, così da sostituirli in istruzioni VBA...
Ciao.
-- 
Sergio MAZZA 

 eseguiAzionePerOgniFile "c:\documenti\", "*.txt", "eliminaImportati"
Sostanzialmente mi è venuta anche una idea che magari può rientrare nel 
portare a buon fine il tutto
E cioe riempire una casellla di riepilogo o combinata leggendo la dir dove 
sono tutti gli exe e su clic di ogni file dalla casella eseguire 
l'operazione di scompattazione e  import delle tabelle, secondo te cosa è 
meglio fare ?
Certo la tua soluzione mi piacerebbe portarla a termine con quel famoso 
click sul bottone, ma se puo esser piu semplice l'alternativa ...dimmi cosa 
ne pensi per favore
Ti quguro una buona giornata e buon lavoro! e scusmi se ho fatto un po di 
confusione ....
paolo 

 paolo
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:f62c6b$hhn$1...@tdi.cu.mi.it...

Ciao Sergio e .....si si e vero oggi è festa ....San Pietro e Paolo ....ma 
non mi hanno concesso di rimanere a dedicarmi a cose diverse ....insomma 
solito lavoro..
Grazie della tua pazienza anche!
Inorridirai di fronte al seguito perchè oggi ho provato a fare cosi (non 
sapendo gestire i cicli) :
Private Sub Comando5_Click()
Dim Fs As Object
Set Fs = CreateObject("Scripting.FileSystemObject")
Fs.CopyFolder "C:\Documents and Settings\Documenti\pic", "c:\import\PIC"
Set Fs = Nothing
FileCopy "C:\Documents and Settings\Documenti\001.001", "C:\import\001.txt"
FileCopy "C:\Documents and Settings\Documenti\030.001", "C:\import\030.txt"
FileCopy "C:\Documents and Settings\Documenti\035.001", "C:\import\035.txt"
FileCopy "C:\Documents and Settings\Documenti\040.001", "C:\import\040.txt"
FileCopy "C:\Documents and Settings\Documenti\042.001", "C:\import\042.txt"
FileCopy "C:\Documents and Settings\Documenti\043.001", "C:\import\043.txt"
FileCopy "C:\Documents and Settings\Documenti\200.001", "C:\import\200.txt"
FileCopy "C:\Documents and Settings\Documenti\201.001", "C:\import\201.txt"
FileCopy "C:\Documents and Settings\Documenti\202.001", "C:\import\202.txt"
FileCopy "C:\Documents and Settings\Documenti\203.001", "C:\import\203.txt"
FileCopy "C:\Documents and Settings\Documenti\204.001", "C:\import\204.txt"
FileCopy "C:\Documents and Settings\Documenti\205.001", "C:\import\205.txt"
FileCopy "C:\Documents and Settings\Documenti\206.001", "C:\import\206.txt"
FileCopy "C:\Documents and Settings\Documenti\207.001", "C:\import\207.txt"
FileCopy "C:\Documents and Settings\Documenti\208.001", "C:\import\208.txt"
FileCopy "C:\Documents and Settings\Documenti\209.001", "C:\import\209.txt"
FileCopy "C:\Documents and Settings\Documenti\210.001", "C:\import\210.txt"
FileCopy "C:\Documents and Settings\Documenti\211.001", "C:\import\211.txt"
FileCopy "C:\Documents and Settings\Documenti\212.001", "C:\import\212.txt"
FileCopy "C:\Documents and Settings\Documenti\215.001", "C:\import\215.txt"
FileCopy "C:\Documents and Settings\Documenti\216.001", "C:\import\216.txt"
FileCopy "C:\Documents and Settings\Documenti\217.001", "C:\import\217.txt"
FileCopy "C:\Documents and Settings\Documenti\222.001", "C:\import\222.txt"
FileCopy "C:\Documents and Settings\Documenti\225.001", "C:\import\225.txt"
FileCopy "C:\Documents and Settings\Documenti\226.001", "C:\import\226.txt"
FileCopy "C:\Documents and Settings\Documenti\228.001", "C:\import\228.txt"
FileCopy "C:\Documents and Settings\Documenti\231.001", "C:\import\231.txt"
FileCopy "C:\Documents and Settings\Documenti\232.001", "C:\import\232.txt"
FileCopy "C:\Documents and Settings\Documenti\233.001", "C:\import\233.txt"
FileCopy "C:\Documents and Settings\Documenti\400.001", "C:\import\400.txt"
FileCopy "C:\Documents and Settings\Documenti\401.001", "C:\import\401.txt"
FileCopy "C:\Documents and Settings\Documenti\402.001", "C:\import\402.txt"
FileCopy "C:\Documents and Settings\Documenti\432.001", "C:\import\432.txt"
DoCmd.RunMacro "Import_alle_SA_C:\Import"
'DoCmd.RunMacro "Export_alle_SA_C:\Export"
RmDir "C:\Documents and Settings\Documenti\pic"
Dim NomeFile As String
NomeFile = "C:\Documents and Settings\Documenti\001.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\030.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\035.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\040.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\042.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\043.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\200.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\201.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\202.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\203.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\204.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\205.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\206.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\207.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\208.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\209.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\210.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\211.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\212.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\215.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\216.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\217.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\222.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\225.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\226.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\228.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\231.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\232.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\233.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\400.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\401.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\402.001"
Kill NomeFile
NomeFile = "C:\Documents and Settings\Documenti\432.001"
Kill NomeFile
End Sub
Private Sub Comando7_Click()
Dim dbs As Database
    Set dbs = CurrentDb
    Dim intNumTab As Integer
    intNumTab = dbs.TableDefs.Count - 1
    While intNumTab >= 0
        dbs.TableDefs.Delete dbs.TableDefs(intNumTab).Name
        intNumTab = intNumTab - 1
    Wend
End Sub
Private Sub elenco_DblClick(Cancel As Integer)
Dim Percorso As String, windowstyle As Integer, Attendi As Boolean
   Dim wshell As Object
   Set wshell = CreateObject("WScript.shell")
   wshell.Run "C:\Importtdc\esegui_scompattazione.vbs", windowstyle, Attendi
   Set wshell = Nothing
End Sub
Private Sub Form_Current()
Dim MyPath As String
Dim MyName As String
Me!elenco.RowSource = ""
MyPath = "c:\TDC_Import\"
MyName = Dir(MyPath)
Do While MyName <> ""
    Me!elenco.RowSource = _
    Me!elenco.RowSource & MyName & ";"
    MyName = Dir
Loop
Me!elenco.RowSource = _
Left(Me!elenco.RowSource, _
Len(Me!elenco.RowSource) - 1)
End Sub
In pratica leggo su una casella di riepilogo i file exe e cliccando sul 
primo lo scompatto e poi tramite bottone li sposto li rinomino e li importo 
tramite una macro (i tracciati per tutti gli exe sono identici per 
fortuna...)
Dopodiche elimino i file nella dir documenti.
Il tutto funziona su primo file .
Ora ...secondo te è possibile trasformare quella sequenza di copy e Kill con 
un bel ciclo ? e successivamente passare all exe2 ? tieni conto che via 
codice svuoto poi le tabelle dopo averle esportate sempre con una macro.
Lo so ...sono stato un po contorto ma .....ci ho provato....
Ti sarei grato se potessi dirmi come ottimizzare il tutto secondo i sacri 
crismi ....ho l'impressione che poi sarebbe fatta !
Ti ringrazio in anticipo e naturalmente saluto tutto il mitico NG
Sempre in debito
Paolo 


fileDaTrovare = cartella & tipofileDaTrovare
If Dir(fileDaTrovare) = "" Then '<-- verifica esistenza file
    MsgBox "File: " & fileDaTrovare & ", (non presenti)"
    Exit Sub
End If
fileDaTrovare = Dir(fileDaTrovare)
Do While fileDaTrovare <> "" '<-- per ogni file
    debug.print "kill " & cartella & tipoFileDaTrovare
'-->    Kill cartella & tipoFileDaTrovare
loop

Prima di eseguire le righe commentate (quelle con '-->) verifica nella finestra immediata (CTRL-G) che venga visualizzato 
(debug.print) esattamente l'istruzione FileCopy/Kill che ti serve. Se va bene puoi cancellare la riga col debug.print e rimuovere i 
commenti ('-->)...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:f652op$47p$1...@tdi.cu.mi.it...

Ciao Sergio ! apro e mi trovo un bell' inizio di sabato ..... grazie davveto 
sei sempre gentile, e adesso comincio a sperimentare la soluzione cercando 
anche di capirne bene la costruzione logica naturalmente .
Sono certo che tutto andrà per il meglio e che purtroppo non sapro 
ricambiare ...dati i miei attuali limiti.
Ti faccio sapere senz'altro e nel frattempo ti auguro un felice WE !
Un sentitissimo ringraziamento da parte mia Sergio per la tua 
professionalità e cortesia
Paolo