Newsgroup: it.comp.lang.visual-basic
Titolo: Saltare dei campi nell'importazione con Schema.ini

 Schema.ini <
[FileImport.txt]
ColNameHeader=True
MaxScanRows=0
Format=CSVDelimited
Col1=CampoDB1 Text
Col2=?????????????
Col3=CampoDB2 Text
Col4=CampoDB3 Long
Col5=CampoDB4 Date
Col6=CampoDB5 Date
Col7=CampoDB6 Text
Col8=CampoDB7 Text
DecimalSymbol=.
Grazissime e a presto!
        Alex

potresti essere più preciso? non sono riuscito a capire molto da quello che hai scritto.
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
"Seminate Linux, che Windows si pianta da sè...." (Antico Adagio)
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it
Sinapsi Antispam. Antispam Gratuito.
http://www.nicolaottomano.it/public/SinapsiAntispam-Setup.exe
email spamtrap: 
spam...@nicolaottomano.it

 potresti essere piů preciso? non sono riuscito a capire molto da quello
che hai scritto.
Abbi pazienza, mi rendo conto di non essere stato chiaro, ma ho scritto un
po' di fretta, come al solito.
Quello che vorrei e' importare in un db Access alcuni dati da un file di
testo... e fin qui dovrebbe essersi capito. Il punto e' che io non voglio
importare tutte le colonne del file di testo nella mia tabella su Access. X
intendersi, se il file di testo (poniamo che le colonne siano delimitate da
virgole) ha 10 colonne, io vorrei poter scegliere di importare non tutte le
10 colonne, ma le prime 2 e poi quelle dalla quinta in avanti. Ora,
utilizzando il file schema.ini non ho trovato un modo (sempre che ci sia) x
specificare questa associazione fra colonne e campi del db saltando le
colonne che non mi interessano (3 e 4, x esempio).
A questo punto, compilando il file schema.ini, arrivo all'elenco delle
colonne del file di testo ed all'associazione di ogni colonna con un campo
della tabella sul db.
Esempiuzzo:
Col1=Cognome Text
trad.: Associo la colonna 1 del file di testo al campo Cognome della mia
tabella; il tipo di dati e' testo
Col2=Nome Text
trad.: Associo la colonna 2 del file di testo al campo Nome della mia
tabella; il tipo di dati e' testo
Ora poniamo che le colonne 3 e 4 del file di testo contengano dei dati che
non mi interessano xche' nella mia tabella non ci sono campi corrispondenti
(che so...?... il codice fiscale e il numero di matricola) e che, quindi, io
voglia saltare le colonne in questione, tornando ad importare le colonne
dalla 5 alla 10 (che contengono x es. data di nascita, indirizzo, numero di
telefono, ecc.).
Come faccio a specificarlo nel file schema.ini? ...sempre che sia possibile
specificarlo...
Se ometto le righe del file schema.ini riferite alle colonne 3 e 4 e
riprendo dalla colonna 5
Col5=DataDiNascita Date
Col6=Indirizzo Text
oppure evito l'associazione delle colonne 3 e 4 ad un campo della tabella
sul database
Col3=
Col4=
Col5=DataDiNascita Date
Col6=Indirizzo Text
in entrambi i casi, l'importazione funzionera' solo x le prime 2 colonne
indicate nel file schema.ini.
Spero di essere stato un briciolino + chiaro.
Comunque grazissime!
A presto!
    Alex

 Schema.ini\].[FileImport.txt]"
Una soluzione è esplicitare nella SELECT l'elenco dei campi da importare nella
tabella destinazione, lasciando il file SCHEMA.INI nel suo formato originario.
Ad es.:
MioDB.Execute "Insert into MiaTabella Select Cognome, Nome, DataDiNascita,
Indirizzo from [Text;DATABASE=C:\ProvaSchema.ini\].[FileImport.txt]"
Il file SCHEMA.INI deve corrispondere alla struttura del file di testo, pertanto
non credo esistano altre scappatoie.
Bye
Raf

Ho capito cosa vuoi, ma spiegami: questo file "schema.ini" è un file che hai fatto tu? lo hai già
pronto? E soprattutto che cosa lega il file "schema.ini" al database (che mi pare essere in un file
di testo)?
Inoltre: la regola di lettura del file di database di testo è sempre uguale o vuoi cabiarla a
seconda delle scelte dell'utente?


tabella; il tipo di dati e' testo
La mia interpretazione e' corretta? Ovvero, "Cognome" e' il nome del campo
nella tabella del database mdb, oppure e' il nome del campo nel file di
testo?
Te lo chiedo xche' non sono + molto sicuro di aver capito bene come funziona
quest'accidente di SCHEMA.INI.
Ci ho messo un po' x provare la soluzione che mi hai proposto, xche' al
principio ho avuto qualche problema col delimitatore: il file di testo mi e'
fornito da un rilevatore di badge e i campi sono delimitati da virgole; la
virgola, pero', va in conflitto con il separatore delle cifre decimali
(nelle impostazioni internazionali, deduco) che (ahime'! sigh! sob! :( ) e'
sempre la virgola.
Mi sono rassegnato, quindi, a cambiare da codice ogni virgola nel file di
testo in punto e virgola, quindi ho provato a vedere che succedeva ad aprire
un recordset collegato al file di testo.
Per fare cio', ho creato un DSN ODBC x la connessione al file di testo, poi
ho effettuato la connessione al file txt utilizzando un OLE DB Provider per
driver ODBC:
Dim MioDB As ADODB.Connection, MioRs As ADODB.Recordset
Set MioDB = New ADODB.Connection
Set MioRs = New ADODB.Recordset
MioDB.ConnectionString = "Provider=MSDASQL.1;Persist Security
Info=False;Data Source=ProvaImportaTxt"
MioDB.Open
Set MioRs = MioDB.Execute("Select * from [FileImport.txt]")
Ho testato la proprieta' "Name" di ogni campo del recordset:
for i = 0 to MioRs.Fields.Count -1: debug.print MioRs.Fields(i).Name :Next i
Da cio' ho constatato che i nomi dei campi  (separati nella prima riga del
file da ";") contenevano degli spazi:
Cognome ;Nome ; Codice fiscale; Data di nascita...
Modificando la stringa SQL x popolare il recordset in maniera da elencare i
campi in maniera esplicita, lasciando gli spazi, le cose funzionano:
Set MioRs = MioDB.Execute("Select [Cognome ],[Nome],[Codice
ale     ],[Data di nascita ], [Matricola ] from [FileImport.txt]")
Il recordset e' popolato correttamente.
A questo punto, modifico il codice relativo all'importazione dei dati nel
modo seguente:
MioDBImport.Execute "Insert into MiaTabella Select " & _
"[Cognome ],[Nome],[Codice fiscale     ],[Data di nascita ], [Matricola ] "
& _
"from [Text;DATABASE=C:\Prova Schema.ini\].[FileImport.txt]"
I campi nella tabella sul file mdb (MiaTabella), xo', sono i seguenti:
CognomeLavoratore
NomeLavoratore
CodiceFiscale
DataDiNascita
Matricola
Nel file Schema.ini, la parte relativa all'elenco dei campi e' compilata
cosi':
Col1=CognomeLavoratore Text
Col2=NomeLavoratore Text
Col3=CodiceFiscale Text
Col4=DataDiNascita Date
Col5=Matricola Long
In esecuzione, ottengo un errore di run-time: "L'istruzione INSERT INTO
contiene il seguente nome campo sconosciuto: 'Cognome '..."
Tutto funziona, invece, se modifico l'istruzione INTO nel modo seguente:
MioDBImport.Execute "Insert into MiaTabella Select " & _
"[Cognome ] as CognomeLavoratore,[Nome] as NomeLavoratore,[Codice
ale     ] as CodiceFiscale,[Data di nascita ] as DataDiNascita, [Matricola ]
" & _
"from [Text;DATABASE=C:\Prova Schema.ini\].[FileImport.txt]"
Ancora grazisssssime e alla prox.! :))
    Alex

 di testo)?
Da una parte ho dei dati in un file di testo con campi delimitati
(FileImport.txt); dall'altra parte ho un database Access (MioDB.mdb) che
contiene una tabella (MiaTabella); io voglio portare i dati dall'uno
all'altra. In mezzo ai due sta il famigerato file "schema.ini".
Da cio' che mi pare di aver capito (ma su questo posso tranquillamente
essere smentito - vedi altro post in risposta a Rafunk), se Access trova un
file "schema.ini" che descriva il file di testo (e forse anche l'interazione
con i campi del db...?) effettua l'importazione in maniera piuttosto
semplice.
MioDB.Execute "Insert into MiaTabella Select * from [Text;DATABASE=C:\Prova
Schema.ini\].[FileImport.txt]"
Premesso che MioDB si connette al database MioDB.mdb utilizzando un provider
OLE DB MS Jet, l'istruzione sopra riportata effettua l'importazione nella
tabella "MiaTabella" (contenuta nel database mdb) dei dati ottenuti dal file
di testo "FileImport.txt", attingendo alle informazioni contenute nel file
"schema.ini" presente nella stessa cartella del file di testo
"FileImport.txt".


     Alex
Alla prossima.
Bye
Raf

 Ad esempio specificando Format=Delimited(,)
Le informazioni presenti nella pagina che mi hai segnalato le avevo gia'
lette nell'help di Visual Studio... Forse con troppo poca attenzione...? Io
posso scegliere il carattere virgola come delimitatore, ma se ho impostato
lo stesso carattere come separatore decimale nelle impostazioni
internazionali, devo stabilire nel file "schema.ini" che il separatore
decimale e' un altro (il punto, x es.). Il fatto e' che mi scocciava un
po'... anche se, certo, cosi' funziona.
Per quanto riguarda il modo in cui utilizzare il nome della colonna nel file
"schema.ini"... non so se capisco bene...
La prima riga del file di testo, naturalmente, potrebbe non contenere i nomi
delle colonne, quindi devo specificarli nella sezione apposita. Devo, xcio',
far si' che i nomi dei campi specificati nel file "schema.ini" e quelli dei
campi nella tabella di importazione collimino in qualche modo, (al limite,
anche ricorrendo a degli "alias" nella select, come in una delle mie prove).
Ci sono o non ho capito ancora un accidente?
Comunque, ancora grazissssime! :)
    Alex


Ciao
Raf

 usando ColNameHeader=True...
Scusa, ma... xche'? Il file sul quale ho effettuato le prime prove conteneva
i nomi dei campi nella prima riga. Dovrei evitare "ColNameHeader=True" anche
in quel caso...? Ma cosi', come so di non dover importare anche la prima
riga del file di testo?
    Alex

 riga del file di testo?
Non mi sono spiegato bene.
Intendevo dire che potendo è meglio utilizzare solo le chiavi Col1, Col2 etc.
anziché fare affidamento sulla prima linea per recuperare i campi.
Ma se il file origine ha sempre i nomi dei campi nella prima riga, allora puoi
usare "ColNameHeader=True" per fargli saltare la prima riga, ma comunque alla
fine "vincono" sempre i nomi esplicitati nel file schema.ini.
Ciao
Raf

 fine "vincono" sempre i nomi esplicitati nel file schema.ini.
Ok, capito. Grazie ancora.
    Alex
P.S. OT: Ho visto che nel tuo post e' citato "MusicOff". Mi 6 musicista? :)
Di dove 6?

 ha scritto nel messaggio
news:nvEod.46564$Ni.16...@twister1.libero.it...

Yes... Tastierista. Di Bologna.
Raf

> Yes... Tastierista. Di Bologna.
Come non detto... Io cantante (livello amatoriale... comunque ormai a riposo
;)) )... ma di Genova. :)
    Alex

 ha scritto nel messaggio
news:KPGod.46752$Ni.16...@twister1.libero.it...

Peccato, non bisognerebbe mai smettere una passione...
Con i mezzi che l'informatica musicale può mettere a disposizione attualmente ci
si potrebbe divertire molto anche partendo da un livello non professionale.
Alla prossima!
Raf

 si potrebbe divertire molto anche partendo da un livello non
professionale.
Be', io sono informatico di mestiere, ma l'informatica in musica preferisco
lasciarla ad altri. ;))
E con questo chiudo, xche' ormai sono disgustosamente OT. ;)))))
    Alex