[Access] importazione txt - errori con il metodo 'TransferText' con campi a larghezza fissa e l'utilizzo del file 'schema.ini'

Anonimo
2010-01-29T19:51:45+00:00

Ciao a tutti!

Devo importare tramite VBA nel mio Access 2007 una serie di file .txt con campi a raghezza fissa. Sto provando a farlo con un singolo file: creo con VBA un file 'schema.ini' contenente le informazioni per generare la tabella poi eseguo la seguente istruzione:

DoCmd.TransferText acImportFixed, "C:\importazione\schema.ini", "t001", "C:\importazione\001.txt"

ma mi da il seguente errore:

Errore di run-time '3625':

Specifica file di testo ' C:importazione.ini ' non esiste. Impossibile importare mediante la specifica.

Il metodo ha cancellato tutti gli slash ("") dal path.

Allora ho provato a usare il la seguente istruzione che sfrutta DAO:

CurrentDb.Execute "SELECT * INTO NewContact FROM [Text;FMT=Delimited;HDR=Yes;DATABASE=C:\importazione;].[001#txt];", _

    dbFailOnError

ma anche questa ha un problema: se al posto di 'Delimited' metto 'Fixed' ottengo un errore:

"errore di run-time '3000' - errore riservato, non ci sono specifiche per questo errore"

Se lascio 'Delimited' ovviamente non ottengo ciò che voglio, la tabella importata ha una sola colonna mentre dovrebbe averne due.

Quello che mi impensierisce ulteriormente è che non riesco a fare in modo che la colonna importata abbia il nome che voglio. La prima riga del file di testo 001.txt non contiene i nomi delle colonne, questi sono contenuti nello schema, ma se metto 'HDR=No' nella stringa sql ottengo soltanto che la colonna si chiami genericamente 'F1' , nonostante nello schema (.ini) i nomi delle colonne siano adeguatamente specificati.

Riporto anche lo schema:

[t001]

ColNameHeader = False

CharacterSet = ANSI

Format = Fixed Length

Col0=record-code Char Width 3

Col1=copyright Char Width 50

Mi resta solo la strada di aprire il file di testo, scorrerlo riga per riga, e fare un inserimento per ogni riga. Ma immagino che sia un metodo molto poco raccomandabile in termini di prestazioni.

Potreste aiutarmi a cavarci gli zampetti?

Grazie,

Pileggi

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-01-29T23:17:40+00:00

Ciao Pileggi,

Il parametro "SpecificationName" del metodo TransferText, è il nome della specifica di importazione salvata in Access, non il nome del file Schema.ini, se crei una specifica in Access,poi puoi usarla con TransferText.

Per il metodo CurrentDb.Execute:

Il file schema.ini è sbagliato, in particolare il nome del file e la numerazione delle colonne.

Modificalo così:

[001.txt]

ColNameHeader=False

CharacterSet=ANSI

Format=FixedLength

Col1=record-code Text Width 3

Col2=copyright Text Width 50

Poi, puoi importare il file così


CurrentDb.Execute "SELECT * INTO NewContact FROM [text;DATABASE=C:\importazione;].[001#txt];", _

    dbFailOnError


i parametri verranno letti dal file schema.ini.

Per maggiori info sul file schema.ini puoi vedere:


Much ADO About Text Files

http://msdn.microsoft.com/en-us/library/ms974559.aspx


Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

1 risposta aggiuntiva

Ordina per: Più utili
  1. Anonimo
    2010-01-31T21:55:39+00:00

    Grazie, non riuscivo a trovare materiale ed esempi funzionanti. Adesso funziona tutto.

    Pileggi

    La risposta è stata utile?

    0 commenti Nessun commento