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