OK, adesso possiamo ragionarci su.
1° problema:
Ti dico subito che non hai scampo: devi usare lo Schema.ini, perchè chi fa quel file fa tutto fuorchè renderlo standard.
L'unico modo per non eliminare gli zeri è impostare il tipo del campo a Char, altrimenti vengono interpretati come campo numerico ed automatico elimina gli zeri all'inizio del valore.
Per fare questo l'unico modo è appunto dichiarare il formato delle colonne nel file Schema.ini.
Ad esempio:
codice:
[maxmercury.csv]
ColNameHeader=False
Format=Delimited(;)
MaxScanRows=0
CharacterSet=OEM
Col1="col1" Char Width 255
Col2="col2" Char Width 255
Col3="col3" char Width 255
Col4="col4" char Width 255
Col5="col5" char Width 255
Col6="col6" char Width 255
Col7="col7" char Width 255
Come vedi, ho impostato tutti i campi a Char 255 così non vi sono problemi di sorta.
Inoltre, visto che non sai a priori quanti campi e l'ordine che avrai, dovrai crearti un file Schema.ini 'al volo' ogni volta, leggendo prima l'intestazione dei campi così da poter recuperarne il numero ed il nome.
Qui c'è un'esempio di come fare
http://support.microsoft.com/kb/155512/EN-US/
ma dovrai modificartelo perchè mi sembra di aver capito che lui usa come riferimento una tabella del db. Attento che usa DAO!!!, cosa che sconsiglio, quindi adattatelo per ADO.
Poi potresti fare altre migliorie come: impostare correttamente il tipo di campo a seconda del nome della colonna, la relativa lunghezza, ecc. ma tutto ciò dipende se 'chi' ti manda il file usa sempre una regola certa (cosa che invece mi par di capire non sia proprio così...).
2° problema
Come vedi, nello Schema.ini ho impostato ColNameHeader=False .
In questo modo la prima riga del recordset ottenuto ti mostrerà i nomi dei campi così da poter riconoscere dal nome della colonna il tipo di dato altrimenti (visto che non conosci a priori l'ordine dei campi) come farai a distinguere, ad esempio, il Cliente dalla Ragione Sociale ?
Morale della storia:
Ho sostituito gli asterisci, giusto per avere valori 'leggibili', ed ho quindi fatto la prova su questi dati:
codice:
P.IVA VENDITORE; codice PdR;matricola ;CLIENTE;ragione sociale cliente finale;TIPOLOGIA - ARG/GAS 69/09;Aliquota;
12070090159;00080000210936;61353429;Pippo Pluto;Ditta SPA;0;Aliquota al 10 % 10,00;
Utilizzando questo codice:
codice:
Dim sSQL As String
Dim sPath As String
Dim sTable As String
Dim sConnString As String
sPath = App.Path & "\"
sTable = "maxmercury.csv"
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
sConnString = sConnString & sPath & ";Extended Properties='Text;HDR=NO;FMT=Delimited'"
CN.ConnectionString = sConnString
CN.CursorLocation = adUseClient
CN.Open
sSQL = ""
sSQL = "SELECT * FROM [" & sTable & "]"
rs.Open sSQL, CN, adOpenStatic, adLockReadOnly, adCmdText
' mostro i dati sul DataGrid
Set DataGrid1.DataSource = rs
ottenendo il risultato che vedi nell'immagine allegata.