Newsgroup: it.comp.appl.access
Titolo: tagliare e salvare file TXT

salve a tutti
ho bisogno di aiuto per il salvataggio di uno o più file (premetto che
non ho alcuna conoscenza di programmazione VBA).
questo il problema:
ho una tabella con centinaia di righe con questo tracciato (ordinato
per codice iniziale) nel seguente formato
[CUT]
0102OC2007061820070618 0039078000006             ***************#
0185OC2007061820070618 0044285000001             ***************#
[CUT]
ad ogni cambio delle prime 4 cifre devo creare un file TXT e salvarlo
con il nome così costruito (tutti in una unica cartella):
OXXXXGGHHMM.TXT
deve O è fisso
XXXX è uguale ai primi 4 caratteri della riga
GG è il giorno (che corrisponde alla posizione 13 e 14 del tracciato)
HHMM è ORE E MINUTI della creazione (perchè potrei averne più di uno
nel corso della giornata)
grazie comunque a tutti

 ha scritto nel messaggio 
news:1182175825.4...@x35g2000prf.googlegroups.com...
salve a tutti




OXXXXGGHHMM.TXT

grazie comunque a tutti
----------------  RISPOSTA  ------------------
Per quanto ne so io, lo puoi fare solo con una routine scritta in vba, 
quindi dovresti studiarti qualche manuale di Access per poterla realizzare. 
A occhio e croce direi che basteranno meno di 20 istruzioni per ottenere 
quello che vuoi, ma il NewsGroup non si può sostituire a te.
Ciao
Antonio

potresti almeno indicarmi i comandi da utilizzare che ritieni
"principali"? così li analizzo nell'help di access.
purtroppo ho bisogno di farlo al più presto, non posso studiarmi prima
un intero manuale e poi finire il lavoro
comunque grazie lo stesso

 ha scritto nel messaggio 
news:1182246066.1...@q75g2000hsh.googlegroups.com...

comunque grazie lo stesso
----------------  RISPOSTA  ------------------
Vediamo se posso venirti incontro, stante l'urgenza di cui parli...
Ho ipotizzato che la tabella sia una tabella di Access e che abbia due soli 
campi: Campo1 (che contiene quella sequenza di caratteri che dicevi) e 
Campo2 (che contiene non so cosa, e sarà il contenuto del file creato).
Premesso questo, posizionati sull'oggetto Moduli della finestra di Access e 
fai click su Nuovo.
Copiaci dentro il seguente codice e poi esci. Ti chiederà se vuoi salvarlo e 
tu accetta di farlo, eventualmente anche col nome che ti propone.
Public Function CreaTXT()
    Dim dbs As Database
    Dim tdfs As TableDefs
    Dim tdf1 As TableDef
    Dim rst1 As Recordset
    Dim CampoTabella As String
    Dim PrimeCifre As String
    Dim NomeFile As String
    Dim AreadiComodo As String
    Set dbs = CurrentDb
    Set tdfs = dbs.TableDefs
    Set tdf1 = tdfs("Prova")
    Set rst1 = tdf1.OpenRecordset(dbOpenDynaset)
    If rst1.EOF Then GoTo chiudi
    rst1.MoveFirst
    PrimeCifre = ""
ancora:
    CampoTabella = rst1!Campo1
    AreadiComodo = Left$(CampoTabella, 4)
    If PrimeCifre = AreadiComodo Then GoTo vaiavanti
    PrimeCifre = AreadiComodo
    NomeFile = "O" & PrimeCifre & _
            Mid$(CampoTabella, 13, 2) & _
            Format$(Now, "hhmm") & ".TXT"
    Open "C:\MiaCartella\" & NomeFile For Output As #1
    Print #1, rst1!Campo2
    Close 1
vaiavanti:
    rst1.MoveNext
    If Not rst1.EOF Then GoTo ancora
chiudi:
    rst1.Close
    Set rst1 = Nothing
    Set tdf1 = Nothing
    Set tdfs = Nothing
    Set dbs = Nothing
End Function
A questo punto dovresti essere tornato sulla finestra di Access.
Vai sull'oggetto Macro e scegli di scrivere una nuova macro: in alto scrivi 
l'azione, ovvero "EseguiCodice" ed in basso la funzione "CreaTXT ()"
Per provare il programma, creati una cartella sul disco C e chiamala 
"MiaCartella"
Se esegui la macro, ti verranno creati i files nella cartella indicata.
Ciao
Antonio

grazie per l'aiuto
purtroppo però mi va subito in errore nella riga
    Dim dbs As Database
Errore di compilazione:
Tipo definito dall'utente non definito
ancora grazie e scusa per il tempo che ti faccio perdere

 ha scritto nel messaggio 
news:1182413940....@p77g2000hsh.googlegroups.com...
grazie per l'aiuto

    Dim dbs As Database


--------------  RISPOSTA  ----------------
Che versione di Access hai ? Ma vediamo di risolvere ignorando questo dato.
Apri Access e torna sul modulo che hai generato. A questo punto vai sul menu 
"Strumenti" e scegli la voce "Riferimenti...". Ti dovrebbe comparire un 
elenco di riferimenti disponibili, i primi con un segno di spunta e molti 
altri non spuntati. Evidentemente non risulta spuntato il riferimento a DAO: 
cercalo (sono in ordine alfabetico) alla voce "Microsoft DAO X.Y Object 
Library", di quelle disponibili scegli il rigo col numero di release più 
alto (io, per esempio, ho la 3.6). Riprova l'esecuzione, ora dovrebbe andare 
bene.
Ciao
Antonio

Utilizzo Access 2002
dopo aver messo la spunta a Microsoft DAO 3.6 Object Library
l'esecuzione è andata avanti, ma si pianta su questa riga:
    Set rst1 = tdf1.OpenRecordset(dbOpenDynaset)
Errore di run-time '13'
Tipo non corrispondente
ti riassumo i dati presenti nella tabella:
Campo1: formato testo; valori di 4 caratteri (che poi sono le stesse
con cui inizia il campo2)
Campo2: formato testo: valori di 65 caratteri (0102OC2007061820070618
0039078000006             ***************#)
grazie

 ha scritto nel messaggio 
news:1182497505.5...@m36g2000hse.googlegroups.com...
Utilizzo Access 2002

    Set rst1 = tdf1.OpenRecordset(dbOpenDynaset)



grazie
--------------------------------
La versione di routine che ho realizzato io l'avevo testata prima di 
inviarla, quindi non dovrebbe avere errori di sintassi. Se anzichè usare il 
copia e incolla hai riscritto le istruzioni, dovresti controllare se hai 
riportato tutto correttamente.
Comunque la routine la devi adattare ai tuoi campi e poi stabilire quale 
dovrebbe essere il contenuto di quei files per i quali viene generato il 
nome come volevi tu.
Mi dispiace, ma a questo punto devi cercare di andare avanti da solo, magari 
studiando le istruzioni della routine.
Ciao
Antonio

ho provato ad aprire l'help e ho analizzato i comandi; su questa riga
    Dim rst1 As Recordset
ho inserito DAO.Recordset (al posto di Recordset) e adesso funziona
solo che nel file che viene creato mi inserisce solo una riga, tutte
le successive vengono scartate (nella tabella posso avere X righe che
hanno i primi 4 caratteri uguali).
hai qualche suggerimento?
comunque grazie di tutto

ho risolto; ho così cambiato il codice che mi hai mandato:
Public Function CreaTXT()
    Dim dbs As Database
    Dim tdfs As Tabledefs
    Dim tdf1 As Tabledef
    Dim rst1 As DAO.Recordset
    Dim CampoTabella As String
    Dim PrimeCifre As String
    Dim NomeFile As String
    Dim AreadiComodo As String
    Set dbs = CurrentDb
    Set tdfs = dbs.Tabledefs
    Set tdf1 = tdfs("prova")
    Set rst1 = tdf1.OpenRecordset(dbOpenDynaset)
    If rst1.EOF Then GoTo chiudi
    rst1.MoveFirst
    PrimeCifre = ""
ancora:
    CampoTabella = rst1!Campo1
    AreadiComodo = Left$(CampoTabella, 4)
    If PrimeCifre = AreadiComodo Then GoTo vaiavanti
    PrimeCifre = AreadiComodo
    NomeFile = "O" & PrimeCifre & _
            Mid$(CampoTabella, 13, 2) & _
            Format$(Now, "hhmm") & ".TXT"
    Open "C:\MiaCartella\" & NomeFile For Output As #1
    Print #1, rst1!Campo2
    Close 1
    rst1.MoveNext
    If Not rst1.EOF Then GoTo ancora
vaiavanti:
    Open "C:\MiaCartella\" & NomeFile For Append As #1
    Print #1, rst1!Campo2
    Close 1
    rst1.MoveNext
    If Not rst1.EOF Then GoTo ancora
chiudi:
    rst1.Close
    Set rst1 = Nothing
    Set tdf1 = Nothing
    Set tdfs = Nothing
    Set dbs = Nothing
End Function
e adesso funziona benissimo.
Grazie Antonio per l'aiuto