Newsgroup: it.comp.appl.access
Titolo: Importa file.txt in tabella access

Salve, sono giovane nella programmazione, dovrei importare da file txt in una tabella access.
il file txt si presenta in questo modo : 123456789ABCDEFGHILMNOPQRSTUVZ
e dovrei importare nella prima colonna della tabella i numeri da 1 a 6, nella seconda colonna da 7 a B, nella terza ecc...
chiedo a qualcuno se mi può aiutare.
Un saluto a tutti
Grazie


come puoi facilmente verificare con la procedura guidata di importazione di un file testo
 
Access NON può "agire all'esterno" 
suddividendo quella che descrivi sia una UNICA stringa in una UNICA riga
 
ma la cosa non cambia, e ha lo stesso modo di risoluzione,
SE il file di testo ha più righe con "la stessa stringa"
cioè una stringa che poi si presenta, nelle varie righe, 
da suddividere sempre nello stesso modo
 
QUINDI:
puoi SOLO importare TUTTA la stringa
(che diventa un campo testo in una tabella)
e quindi agire con una query a campi calcolati
adoperando le necessarie funzioni stringa
per ricavare le varie sottostringhe
(i vari campi calcolati)
 

Il giorno domenica 12 maggio 2019 16:33:12 UTC+2, 
giovanni...@gmail.com
 ha scritto:

Pensavo di trovare qualche soluzione con moduli in VBA

La soluzuone di Giorgio impone predisporre 1 tabella di appoggio, importare e poi una query insert con campi generati dalla frammentazione del campo unico...
 
Tutto questo funziona sicuramente.
 
Personalmente però scriverei 5 righe di codice che apre il file e, effettuando un ADDNEW, per ogni Item, nella tabella di destinazione, nei campi sempre frammentando la stringa.
 
Per rendere più veloce il codice apri il file in Binary Mode riempiendo un Array.
Cicli l'array ed ogni item contiene una riga, ricavi le parti frammentate con le funzioni stringa ed update nella tabella.
 
Inglobi tutto in una transazione per far scrivere nella tabella tutto alla fine in caso di Commit.
 
Ti abbozzo un codice base... la prima parte legge il contenuto... la seconda, il ciclo, 
 
Private Sub cmdReadValues_Click()
Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer
Dim rs As DAO.Recordset   
 
    file_name = me!txtFile
    file_length = FileLen(file_name)
 
    fnum = FreeFile
    ReDim bytes(1 To file_length)
 
    Open file_name For Binary As #fnum
    Get #fnum, 1, bytes
    Close fnum
 
    ' APRI recordset sulla tabella in Dynaset
    Set rs=DbEngine(0)(0).openrecordset("Select * FROM TuaTabella")
    ' APRI TRANSAZIONE (Begintrans)
    DbEngine(0).Begintrans
    For i = 1 To file_length
        ' qui fai ADDNEW e UPDATE
        Rs.addnew
        Rs!NomeCampo1=left$(bytes(i),6)
        Rs!NomeCampo2=Mid$(bytes(i),7,6)
        Rs!NomeCampo3=Mid$(avanti....)
        Rs.update
    Next i
    DbEngine(0).Committrans
    'CHIUDE TRANSAZIONE(CommitTrans)
    'Chiudi recordset
    .....
    .....
'gestione errori e ROLLBACK 
End Sub
 
Sistema tutto L'ho scritto a braccio... Non testato.
 
Saluti
@Alex

giovanni...@gmail.com
 submitted this idea :

Prova questa:
======================================
Private Sub Command19_Click()
Dim SQL As String, i As Integer, qDef As QueryDef
Dim h As Integer, TT As String, QN As String, SF As String
 
SF = "D:\aa0.txt" ' Source text-file
TT = "TT_5"       ' Target Table, con un campo: F1
QN = "qTT_5"      ' Query Name
 
DoCmd.TransferText acImportDelim, , TT, SF
SQL = "SELECT "
For i = 1 To 5
    SQL = SQL & "Mid([F1]," & i + h * 5 & "," & 6 & _
                ") AS " & h + 1 & ", "
    h = h + 1
Next
SQL = Mid(SQL, 1, Len(SQL) - 2) & " FROM " & TT & ";"
Set qDef = CurrentDb.CreateQueryDef(QN, SQL)
DoCmd.OpenQuery QN
 
End Sub
======================================
 
Target Table deve esistere con un campo denominato F1.
 
Bruno

Il giorno domenica 12 maggio 2019 16:33:12 UTC+2, 
giovanni...@gmail.com
 ha scritto:

Per problemi di tabulazione ho dovuto cambiare il file.txt nel seguente modo :
1111111111111111
22222222222222
333333333333333
4444444444444444444444
5555555555555555
66666666666666
ecc.
 
pertanto dovrei importare, con codice vba, il contenuto della prima riga nel campo1 di una tabella di access, la seconda riga nel campo2 e così via.
ringrazio tutti per gli aiuti  

Da tutti gli esempi che hai ricevuto prova a spremere il limone e proponici una tua visione... se poi non va ti aiutiamo... ora un po del tuo lo devi mettere... ti abbiamo fornito codice pronto che con poco puoinadattare... non vorrai sia stato per perdere tempo...
 
@Alex

Il giorno domenica 12 maggio 2019 16:33:12 UTC+2, 
giovanni...@gmail.com
 ha scritto:

Ringrazio Alex e Bruno per le soluzioni postate in precedenza.
Io sono riuscito a fare questo 
Sub Importa_Dati()
Dim StrTesto As String
Dim Time As String
    Open "C:\mioFile.txt" For Input As #1
    Do Until EOF(1)
      Input #1, StrTesto
     StrTesto = Mid$(StrTesto, 1, 10)
     CurrentDb.Execute "INSERT INTO DATI (DATA) VALUES ('" & StrTesto & "')"
     Loop
     Close #1
End Sub
 
ma mi restituisce la lettura ed importazione della prima riga del txt e considerando che il numero di caratteri della riga del mio txt varia, ho dovuto dividere la riga in diverse righe che di conseguenza dovrei trasferire nei rispettivi campi della tabella DATI,
Grazie ancora per la collaborazione. 

Il giorno domenica 12 maggio 2019 16:33:12 UTC+2, 
giovanni...@gmail.com
 ha scritto:

Salve a tutti,
eccomi tornato, questo è quello che sono riuscito a fare,
 
Sub Imp_Dati()
Dim riga As String
Dim Time As String
Dim cogn As String
    Open "C:\Tess.txt" For Input As #1
     Do While Not EOF(1)
    Input #1, riga
   data = Mid(riga, 1, 10)
   ora = Mid(riga, 12, 8)
   cf = Mid(riga, 21, 16)
   cogn = Mid(riga, 38, 8)
   nom = Mid(riga, 47, 4)
   Dat_Nasc = Mid(riga, 52, 10)
   Luog_Nasc = Mid(riga, 63, 6)
   prov_nasc = Mid(riga, 70, 6)
   naz_nasc = Mid(riga, 77, 7)
   Via_Res = Mid(riga, 84, 16)
   Num_Civ = Mid(riga, 101, 2)
   Cit_Res = Mid(riga, 104, 19)
   cap_res = Mid(riga, 123, 5)
   prov_res = Mid(riga, 129, 2)
   Num_Tes = Mid(riga, 131, 21)
 
     CurrentDb.Execute "INSERT INTO DATI (DATA, ORA, Cod_Fisc, Cognome, Nome)" & _
     "VALUES ('" & data & "','" & ora & "','" & cf & "','" & cogn & "','" & nom & "')"
     Loop
     Close #1
  End Sub
 
però il problema sta nel fatto che il numero di caratteri delle righe del file.txt è variabile, quindi se cambio tessera mi sballa tutto.
Dovrei trasferire da txt a tabella/Campo ogni singola riga letta a prescindere dalla larghezza o dal numero di caratteri in essa contenuto.
Qualcuno può aiutarmi a risolvere questo.
Ringrazio tutti per la collaborazione.

 Ringrazio tutti per la collaborazione.
 
su quale base (conoscitiva) poggia la (tua) convinzione 
che questa risoluzione è fattibile
e che, quindi, si può prendere l'impegno di affrontarla ?