Unable to read data from a CSV using ADO due to the driver thinking I am working with integers/number and showing nulls instead of text

Basically, don’t rely on the registry entries as explained here on MSDN.

You need to create a Schema.ini file and put it in the same folder as all your text files. In the Schema.ini you specify the type for all columns you may have in your text files – it’s just a much safer option to do that explicitly rather than have the driver work out the correct types for columns…

Say you have some txt files on your desktop, open Notepad and copy paste the below – make sure you adjust the [test.txt] part to match the name of your actual txt file and save it as: Schema.ini

[test.txt]
Format=CSVDelimited

Col1=Column1 Text
Col2=Column2 Text

Make sure you add another slash at the end of the parth in the strPath (also indicated in the article)

strPath = ThisWorkbook.Path & "\Excel_Barcode_Files\"

*Keep in mind that I am working in a different location to yours – I am using my Desktop for this example and my text file is named test.txt

Now, that you have a Schema.ini you can modify the connection string and take out some parameters which are not required because they exists in the Schema.ini

So bascially an SSCCE based on the above assumptions would be:

Sub Main()

    Cells.ClearContents

    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset

    Dim thePath As String
    thePath = "C:\Users\" & Environ("USERNAME") & "\Desktop\"


    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & thePath & ";" _
                        & "Extended Properties=""text;HDR=No;"""

    cn.Open

    Dim sql As String
    sql = "SELECT * FROM test.txt"

    ' populate the recordset
    rs.Open sql, cn, adOpenStatic, adLockOptimistic, &H1

    ' copy the recordset starting at Range("A1") - assuming there are no headers - see HDR = No;
    Range("A1").CopyFromRecordset rs

    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

End Sub

Now after running this you should see all the values including the missing P:

enter image description here

Leave a Comment