Visualizzazione dei risultati da 1 a 10 su 10

Visualizzazione discussione

  1. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    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.



    Immagini allegate Immagini allegate

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.