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

Re: importare txt in access

Postdi miko » 01/07/11 10:58

ciao,
ho risolto il problema usando una macro di flash che ho trovato e che vi posto:
Codice: Seleziona tutto
Private Sub Comando0_Click()
Dim Riga As String
Dim Criterio As String
Set Db = CurrentDb
Set ds = Db.OpenRecordset("SELECT Count(ID) AS Conteggio FROM ARCHIVIO")

Y = 0
Open "D:\ACCESS\PROGETTO\ARCHIVIO.Txt" For Input As #1

Do Until EOF(1)
     Line Input #1, Riga
     
     Nc = Val(Mid(Riga, 11, 2))
     DataC = Mid(Riga, 18, 10)
     Pe = Val(Mid(Riga, 31, 2))
     Se = Val(Mid(Riga, 34, 2))
     Te = Val(Mid(Riga, 37, 2))
     Qe = Val(Mid(Riga, 40, 2))
     Qi = Val(Mid(Riga, 43, 2))
     Ses = Val(Mid(Riga, 46, 2))
     Sett = Val(Mid(Riga, 49, 2))
     Ott = Val(Mid(Riga, 52, 2))
     Nov = Val(Mid(Riga, 55, 2))
     Dec = Val(Mid(Riga, 58, 2))
     
   Criterio = "INSERT INTO ARCHIVIO(NC, Data, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10) "
    Criterio = Criterio & "VALUES (" & Nc & ", '" & DataC & " ', '" & Pe & "', '" & Se & "', '" & Te & "', '" & Qe & "', '" & Qi & "', '" & Ses & "', '" & Sett & "', '" & Ott & "', '" & Nov & "', '" & Dec & "')"
              Db.Execute Criterio
 
Loop
Close #1

Set ds = Db.OpenRecordset("SELECT Count(ID) AS Conteggio FROM ARCHIVIO")
ds.Close
Db.Close
End Sub

il codice funziona, ma ho riscontrato un incoveniente quando il txt contiene un numero di righe superiore a 999;
questo dipende dalla struttura delle linee, ad esempio
Codice: Seleziona tutto
..Pe = Val(Mid(Riga, 31, 2))...

se la struttura del txt è del tipo:
Conc. N. 12 del 30/09/2009 : 1 2 5 9 10 13 16 17 18 19
e fino a quando nel txt sono contenute un numero di righe comprese tra 1 e 999, il precedente codice rispetta la posizione dei valori e tutto viene importato correttamente;
ma se nel txt si ha ad esempio una situazione di questo tipo:
Conc. N. 999 del 30/09/2009 : 1 2 5 9 10 13 16 17 18 19
Conc. N. 1000 del 30/09/2009 : 1 2 5 9 10 13 16 17 18 19
come potete notare si ha uno spostamento verso sinistra della seconda linea
ed il codice non effettua una corretta importazione;
in pratica
Pe = Val(Mid(Riga, 31, 2)) dovrebbe diventare Pe = Val(Mid(Riga, 32, 2))
immagino che lostesso problema si presenterà quando si supererà la riga 9999 per passare a 10000.
come posso modificare il codice per ovviare a tale inconveniente?
saluti grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: importare txt in access

Postdi miko » 04/07/11 22:40

salve,
per risolvere il problema dello spostamento verso sinistra delle linee da importare dovuto al passaggio del campo NC da 999 a 1000 ho pensato di procedere in questo modo:
1) costruisco una tabella priva della colonna NC;
2) non importo il campo NC dal txt ma solo gli altri campi;
3) inserisco la colonna NC in tabella;
4) tramite vba inserisco nella colonna NC una successione di numeri crescenti dal valore 1 al valore max del numero di records della tabella.
5) ad una successiva importazione dal txt elimino la colonna NC e ripeto il procedimento.
ho usato queste linee di codice:
Codice: Seleziona tutto
Private Sub Comando0_Click()
Dim Criterio As String
Set db = CurrentDb
Set ds = db.OpenRecordset("SELECT Count(DATA) AS Conteggio FROM Tabella1")
record_esistenti = ds!conteggio

For R = 1 To record_esistenti
       
 Criterio = "UPDATE Tabella1 SET NC='" & R & "'"
        db.Execute Criterio

Next R
ds.Close
db.Close
    End Sub

il codice funziona in quanto inserisce il valore numerico R nella colonna NC, ma è un unico valore che si ripete dal primo record fino all'ultimo.
le ricerche effettuate non mi hanno dato esito positivo.
come modifico il codice affinchè si abbia la successione 1 2 3 4...
grazie ciao
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Avatar3 » 05/07/11 00:12

Scusami ma non capisco se fai domanda né tantomenose la tua è una considerazione.
Se tu elimini NC (numero concorso)
rischi che nel caso di estrazioni uguali, molto difficili da ottenre, le elimineresti mentre con NC avresti un minimo pari a 0 (zero) significa che c'è stata una estrazione identica a quella processata
oppure non ho compreso quanto hai scritto?
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 » 05/07/11 08:22

buongiorno,
la mia era una domanda-richiesta;
la colonna NC, numero concorso, della tabella viene eliminata temporaneamente in modo che durante l'importazione dal txt non si verifichi lo spostamento di righe ed i dati vengono introdotti senza troncamenti;
dopo l'importazione reinserisco la colonna NC nella tabella e nei suoi campi inserisco la successione di numeri 1,2,3,4... così come è strutturata la colonna NC nel txt;
dalle colonne NC, sia in tabella che nel txt, si rileva solo il numero dell'estrazione e con il procedimento che ho pensato questi numeri sono uguali, in ogni caso, a quelli contenuti nella stessa colonna del txt;
per cui nulla cambia ed anche se ci sono estrazioni uguali, nelle 2 colonne NC ottengo sempre gli stessi valori.
ma è meglio questa soluzione che avere i numeri delle estrazioni troncati privi di qualche cifra o completamente assenti, valori nulli nei campi relativi della tabella.
ciao, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Postdi archimede » 05/07/11 09:27

miko ha scritto:come modifico il codice affinchè si abbia la successione 1 2 3 4...
Basta definire NC Contatore.

HTH.

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

Re: importare txt in access

Postdi miko » 05/07/11 10:55

ciao,
grazie archimede per il suggerimento;
ma così avrei due campi contatori, e come ho scritto in un altro post, quello inserito in automatico da access non sempre è sequenziale.
vorrei un campo indipendente e realizzarlo con una macro;
così imparo anche un pò di programmazione:
ho scritto questo altro codice:
Codice: Seleziona tutto
Dim Criterio As String
Set db = CurrentDb
Set ds = db.OpenRecordset("SELECT Count(DATA) AS Conteggio FROM Tabella1")
record_esistenti = ds!conteggio
For R = 1 To record_esistenti
        Criterio = "INSERT INTO Tabella1 (NC)"
        Criterio = Criterio & "VALUES(" & R & ")"
        db.Execute Criterio
Next R
ds.Close
db.Close
End Sub

anche questo funziona parzialmente in quanto inserisce nel campo NC la successione 1,2,3...ma a partire dal record successivo a quello presente in tabella;
in altri termini se la tabella contiene 10 records la macro inizia a scrivere dalla 11 e negli altri campi delle altre colonne trovo il valore 0 (zero).
sto leggendo vari argomenti al riguardo, ma non ricavo proprio niente.
ciao grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Re: importare txt in access

Postdi Flash30005 » 05/07/11 17:35

L'Insert aggiungere sempre dei record
a te occorre un Update
prova questa macro

Codice: Seleziona tutto
Set db = CurrentDb
Set ds = db.OpenRecordset("SELECT ID FROM Tabella1")
m_id = ds!id
RecEs = 0
Do Until ds.EOF
   RecEs = RecEs + 1
   db.Execute "UPDATE Tabella1 SET NC = " & RecEs & " WHERE id=" & ds!id
   m_id = ds!id
   ds.MoveNext
Loop
ds.Close
db.Close


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: importare txt in access

Postdi miko » 05/07/11 18:02

ciao,
ho provato funziona perfettamente;
ho perso giornate in ricerche e studio di listati infiniti, ed invece una macro semplice ha risolto il problema.
grazie ciao
windows 10 - office 2013
miko
Utente Senior
 
Post: 521
Iscritto il: 29/12/09 10:44

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "importare txt in access":


Chi c’è in linea

Visitano il forum: Nessuno e 71 ospiti