Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

importare txt in access

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

importare txt in access

Postdi miko » 24/05/11 12:02

ciao,
come da titolo sto cercando di realizzare una macro in access per importare dei dati contenuti in un file di testo, in una tabella per poi eseguire altri calcoli.
i dati sono a larghezza fissa.
ho letto che si può creare una tabella oppure utilizzare il file di testo, ma non so quale sia meglio.
sono riuscito ad importare il file tramite la creazione guidata e l'importazione di dati esterni, ma non riesco a "memorizzare" i vari passaggi con il registratore di macro;
sembra che in access non è possibile come in excel o forse sono io che non lo trovo.
ho letto un piccolo articolo in inglese, e pur seguendo passo passo le istruzioni non ho ricavato nulla.
potreste indicarmi come realizzare la macro o suggerirmi qualche sito che tratta questo argomento?
non conosco access per cui necessito delle più elementari istruzioni.
saluti grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 


Re: importare txt in access

Postdi miko » 26/05/11 11:56

salve,
grazie per avermi indicato i siti;
li avevo già visti, in particolare avevo seguito le istruzioni del secondo, ma forse avevo saltato qualche passaggio ed ora ci sono riuscito:
una volta realizzata la macro come posso vedere il codice?
non riesco a visualizzarlo
ciao e grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi miko » 31/05/11 09:03

ciao,
nonostante i miei tentativi continuo a non visualizzare il codice relativo alla macro che ho registrato.
potete indicarmi come si può visualizzare?
forse non è possibile?
grazie saluti
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44


Re: importare txt in access

Postdi miko » 06/06/11 17:39

salve,
grazie per le ulteriori indicazioni;
dopo aver 'studiato' sono riuscito ad eseguire l'importazione del file di testo;
il codice della relativa macro è costituita da poche righe, mentre i listati che ho trovato in rete relativi allo stesso argomento sono costituiti da molte righe, e non capisco questa differenza.
per completare l'argomento vorrei importare solo le ultime righe del file di testo;
se nella tabella che ho realizzato ci sono 100 records, mentre nel file di testo ci sono 110 righe come si possono inserire le ultime 10 righe del txt?
mi sto perdendo tra query di accodamento e aggiunta di records, come è meglio procedere?
grazie, ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Avatar3 » 06/06/11 17:56

Se ti è sufficiente questo input procedi da solo altrimenti posta ancora
Se hai importato il file testo con la classica open
Codice: Seleziona tutto
y = 0
Open "C:\File.txt" For Input As #1
Do Until EOF(1)
     y = y + 1
Loop
Close #1
msgbox y

Avrai il numero delle righe totali del file testo ammettiamo 120
quindi
Codice: Seleziona tutto
X = 0
Open "C:\File.txt" For Input As #1
Do Until EOF(1)
     X = X+1
If X > Y-100 then 
Line Input #1, riga
Call macro 'trattamento riga
endi if
Loop
Close #1

Quando X supera 20 nella stringa riga avrai il record del file testo che tratterai a parte
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: importare txt in access

Postdi miko » 06/06/11 18:54

ciao avatar, grazie per il tuo contributo;
non capisco come usare il codice che hai scritto;
per l'importazione ho seguito il wizard per la creazione di una tabella, poi ho costrutito una maschera ed inserito un pulsante che avvia la macro;
il codice della macro, contenuta nel form è il seguente:
Codice: Seleziona tutto
Option Compare Database
Private Sub IMPORTA_ARCHIVIO_Click()
On Error GoTo Err_IMPORTA_ARCHIVIO_Click
    Dim stDocName As String
    stDocName = "AGGIORNA ARCHIVIO"
    DoCmd.RunMacro stDocName
Exit_IMPORTA_ARCHIVIO_Click:
    Exit Sub
Err_IMPORTA_ARCHIVIO_Click:
    MsgBox Err.Description
    Resume Exit_IMPORTA_ARCHIVIO_Click
End Sub

e nel modulo si trova
Codice: Seleziona tutto
Option Compare Database
'------------------------------------------------------------
' AGGIORNA_ARCHIVIO
'------------------------------------------------------------
Function AGGIORNA_ARCHIVIO()
On Error GoTo AGGIORNA_ARCHIVIO_Err
    DoCmd.TransferText acImportFixed, "ARCHIVIO - specifica di importazione", "ARCHIVIO", "D:\GUIDA ACCESS\IMPORTA TXT IN ACCESS\ARCHIVIO.Txt", False, ""
AGGIORNA_ARCHIVIO_Exit:
    Exit Function
AGGIORNA_ARCHIVIO_Err:
    MsgBox Error$
    Resume AGGIORNA_ARCHIVIO_Exit
End Function

"... classica open "
nel mio caso non esiste,
non capisco anche:
...avrai il record del file testo che tratterai a parte

chiedo venia, ma mi sono avvicinato da poco ad access e solo poche cose sono chiare
ciao, grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Avatar3 » 06/06/11 19:44

Beh allora diventa più complicato
però se ti vuoi divertire metti un msgbox al posto di questa riga
Codice: Seleziona tutto
Call macro 'trattamento riga

inserisci un pulsante di comando che attiva la macro (utilizzando genera evento e cancella tutto ciò che vi è scritto)
lascia solo queste due righe

Codice: Seleziona tutto
Private Sub Comando0_Click()
' qui inserisci la macro conteggia righe che ti ho postato

' qui inserisci la macro che legge le righe con il suo msgbox aggiunto
End Sub

Importante mettere il percorso e nome corretto del file.txt
chiudi struttura e salva la maschera
apri la maschera e premi il pulsante di comando
il primo messaggio ti darà il numero di righe contenute nel file.txt
dal secondo messaggio in poi avrai la stringa della ventunesima riga fino alla centesima riga (ultima)
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: importare txt in access

Postdi miko » 06/06/11 21:21

ciao,
seguendo le tue indicazioni non ho ottenuto alcun risultato;
la pressione del pulsante non genera evento;
sicuramente sbaglio il procedimento:
se puoi inserite tu, quando hai tempo, il codice così vedo come procedere;
ti invio il file con il pulsante generico ed il pulsante "AGGIORNA" che avvia la macro che ho registrato:
http://uploading.com/files/7c7e94bm/IMPORTA%2BARCHIVIO.mdb/
intanto io sto cercando argomenti relativi all'importazione mediante macro con open come mi hai suggerito.
grazie, saluti
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Avatar3 » 06/06/11 21:57

Ti invio il tuo file con all'interno la macro "gioco" che avevo pubblicato e corretto per il funzionamento
Scompattando il file archivio troverai un file.txt che dovrai inserire nella root di C:\
(il file .mdb può essere ovunque)
poi lancerai il database e premi sul comando2
avrai il conteggio delle righe del file.txt (che puoi aprire e controllare)
dopo il messaggio conteggio righe appariranno messaggi successivi che ti fanno vedere cosa contiene la riga 21, poi la riga 22 etc fino alla 120, quindi le ultime cento

https://rapidshare.com/files/2450979789/Miko.zip
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: importare txt in access

Postdi miko » 07/06/11 11:35

salve,
vedendo il file che hai realizzato, i miei tentativi di avviare la macro erano completamente inutili;
mancavano alcune linee di codice.
come devo modificare il codice per importare solo le ultime n righe del file txt, in modo da non dover introdurre nella tabella tutte le righe, comprese quelle già importate?
nel codice trovo questa linea: " Line Input #1, riga "
forse bisogna agire su questa?
provando e modificando le varie macro che ho trovato non ho ottenuto risultati anzi ho sempre errore.
saluti, grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Avatar3 » 07/06/11 12:24

Ehm
mi sembra che ora stai cambiando le carte in tavola :lol:
Nel post precedente dicevi le ultime 100 righe pensando che fosse un numero definito
ora invece dici n righe corrispondenti a quelle non già importate in tabella
la cosa più semplice è quella di importare tutto il file testo ogni volta (anche con la tua macro
ma devi entrare nella struttura della tabella e inserire tante chiavi primarie (contemporaneamente) quante servono per avere un codice univoco e mettere come opzione "Duplicati non ammessi"
Ci "penserà" Access a non importare quei record che hanno quei campi uguali
es. hai 3 campi
Campo1, Campo2, Campo3
se non vuoi che entrino record che hanno cCampo1 uguale metti la chiave primaria solo a questo campo
se il file testo ha
1, a, 7
2, a, 7
1, b, 6
1, a, 7
1, a, 6
In quella condizione avrai due soli record
1, a, 7
2, a, 7
mentre se inserirai la chiave primaria sul
campo1 e campo2
avrai tre record
1, a, 7
2, a, 7
1, b, 6

Se inserisci le chiavi primarie a tutti e tre i campi avrai 4 record
1, a, 7
2, a, 7
1, b, 6
1, a, 6

Che come vedi hanno tutti i campi diversi (il record doppione 1, a, 7 è stato eliminato)
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: importare txt in access

Postdi miko » 07/06/11 13:00

ciao, grazie per le spiegazioni;
scusate se forse vi ho tratto in inganno con l'esempio numerico, cercavo solo di far comprendere il mio problema nel modo più semplice .
il file di testo, ad agni aggiornamento, aumenta di righe;
non posso seguire anche le tue ultime indicazioni circa la chiave primaria poichè è possibile che vi siano anche righe-records uguali che non devono essere eliminati;
in generale se nella tabella ho già importato x records, mentre il txt contiene n>x righe, devo fare la differenza n-x=y, così ad una successiva importazione devo introdurre in tabella le ultime n-x =y righe del txt.
grazie, ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Avatar3 » 07/06/11 13:41

Il codice per contare il nuermo di record in una tabella è questo
Codice: Seleziona tutto
Set db = CurrentDb
Set ds = db.OpenRecordset("SELECT Count(NomeCampo) AS Conteggio FROM NomeTabella")
record_esistenti = ds!conteggio
ds.Close

La cosa più semplice da fare a questo punto penso sia l'utilizzo della tua macro che importa i dati ma da un file che crei ogni volta per differenza dal file originale
assumi il file originale come File.txt in C:\
e il file differenza righe sarà FileOk.txt
con questa macro in sostituzione del codice pulsante2 avrai il fileOk con la differenza delle righe della tabella (record_esistenti) rispetto al file.txt
Codice: Seleziona tutto
Private Sub Comando2_Click()
Dim Riga As String
On Error Resume Next
Kill "C:\FileOk.txt"
On Error GoTo 0

Set db = CurrentDb
Set ds = db.OpenRecordset("SELECT Count(NomeCampoTabella) AS Conteggio FROM NomeTabella")
record_esistenti = ds!conteggio
ds.Close

Y = 0
Open "C:\File.txt" For Input As #1
Do Until EOF(1)
     Y = Y + 1
     Line Input #1, Riga
Loop
Close #1
MsgBox Y
X = 0
'record_esistenti = 100
Open "C:\File.txt" For Input As #1
Do Until EOF(1)
     X = X + 1
If X > Y - record_esistenti Then
Line Input #1, Riga
  Open "C:\FileOk.txt" For Append As #2
  Print #2, Riga
  Close #2
Else
Line Input #1, RigaS
End If
Loop
Close #1

End Sub
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: importare txt in access

Postdi miko » 08/06/11 10:50

ciao,
credo di aver capito il procedimento che hai descritto, ma ho bisogno di conferme e chiarimenti;
il file di testo originale viene memorizzato nel FILE.txt;
con il pulsante 2 si avvia la macro che hai realizzato, e questa legge il numero di righe del txt, legge i records, e produce in automatico un secondo
txt FILEOK.txt contenente il numero di righe che devo importare;
la macro che ho registrato importa dal FILEOK.txt
nella linea di codice :
Set ds = db.OpenRecordset("SELECT Count(NomeCampoTabella) AS Conteggio FROM NomeTabella")
al posto di NomeCampoTabella, devo inserire il nome di un campo preciso ed inequivocabile, che abbia i numeri in successione, oppure va bene un campo qualunque perchè la macro conta i records indipendentemente del contenuto dei campi?
questo anche perchè ho notato che la colonna contatore - id non riporta i numeri in successione ma passa a valori molto alti tipo 370456, ma io non ho tutti questi dati.
manipolando, per fare prove, il database che ho inviato ora non funziona più e continuo ad avere sempre errore.
da quando ho scritto questo messaggio ho creato decine di volte il database seguendo le istruzioni che ho trovato in rete.
non capisco come mai prima ci sono riuscito ora non più.
la macro che costruisco per l'importazione, che è quella contenuta nel file che ho inviato, funziona perfettamente, ma se costruisco la maschera con un pulsante che avvia la macro, tra le tabelle trovo sempre una seconda tabella " ERRORI DI SALVATAGGIO CORREZZIONE AUTOMATICA NOME "
che significa, dove sbaglio?
saluti, grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Avatar3 » 08/06/11 11:17

Tutta la prima parte è ok fa quello che hai detto
il CampoTabella può essere qualsiasi campo che contiene dati (data, numero, testo) perché quel codice fa un conteggio dei record.

Per quanto riguarda l'errore penso che un campo della tabella sia formattato diversamente rispetto a ciò che trova nel file testo.
Puoi aprire la tabella Errori per vedere quale campo è
la tabella errori, dopo un controllo, può essere eliminata (anzi deve)

Controlla anche che il fileOk abbia la stessa struttura diel file.txt (originale)

Una domanda: come fai a dire la macro funziona perfettamente, però con un pulsante su una maschera dà errore
Le macro in access funzionano "solo" con i pulsanti (o altri tipi di avvio come aggiornamenti, click etc) ma non attivandola in debug (tipo F8) come avviene in excel.
Puoi mettere un punto di interruzione all'inizio della macro chiudere il VBA
premere il pulsante e allo stop procedere passo passo con F8
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Postdi archimede » 08/06/11 13:37

Avatar3 ha scritto:il CampoTabella può essere qualsiasi campo che contiene dati (data, numero, testo) perché quel codice fa un conteggio dei record.
Inesatto: i records per i quali quel campo è null non verranno contati (almeno credo che anche Access funzioni così). Usa COUNT(*) e non ti devi preoccupare di questo.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2753
Iscritto il: 07/11/02 12:41
Località: Genova

Re: importare txt in access

Postdi miko » 08/06/11 15:13

ciao,
ho continuato a "pasticciare" con il file.mdb e continuo ad avere lo stesso problema;
per eseguire la macro, la seleziono e poi premo esegui come in fig.
Immagine
sono sicuro che funziona poichè dopo apro il database e vedo che sono stati aggiunti altri records, dopo l'ultimo inserito in precedenza, ed ho una situazione come in fig.
Immagine
se invece uso il pulsante su maschera ottengo errore come in fig.
Immagine
cliccando sulla nuova tabella "ERRORI...." si vede questo
Immagine
questi errori non si verificavano nella mia priva versione del file.
anche se elimino la tabella errori, ad ogni successivo click del pulsante viene creata nuovamente.
ho provato ad eliminare la tabella originale "ARCHIVIO", se eseguo la macro come in fig1, tutto funziona e access mi crea una nuova tabella avente lo stesso nome, nella quale pero ho notato che, ad ogni successiva importazione, i dati, essendo sempre gli stessi non vengono accodati dopo l'ultimo records come avviene quando ho realizzato la tabella e poi eseguo la macro, ma si ha un gruppo di records contenenti gli stessi valori, poi un gruppo di records contenete gli stessi valori ma differenti dal primo gruppo e poi così via;
ad esempio:
record1: 1 2 3 4
record2 : 1 2 3 4
record3 : 5 6 7 8
record4 : 5 6 7 8
......
..Usa COUNT(*) e non ti devi preoccupare di questo.

intendi dire che devo sostituire Count(NomeCampoTabella)?
ma il simbolo (*) indica la colonna contatore?
perchè ho scritto
perchè ho notato che la colonna contatore - id non riporta i numeri in successione ma passa a valori molto alti tipo 370456, ma io non ho tutti questi dati

non capisco dove sbaglio, seguo sempre le sesse istruzioni della prima volta;
forse il primo risultato buono era dovuto alla fortuna del principiante.
saluti, grazie per il vostro interessamento.
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Postdi archimede » 16/06/11 07:40

miko ha scritto:se invece uso il pulsante su maschera ottengo errore come in fig.
Posta il codice del pulsante.

Alessandro
archimede
Moderatore
 
Post: 2753
Iscritto il: 07/11/02 12:41
Località: Genova

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "importare txt in access":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti