Solved

Using ADO to open a CSV File...

Posted on 2006-11-15
7
2,597 Views
Last Modified: 2013-12-25
Hi Experts,

I am trying to access a CSV File using ADO and having some trouble.

The connection string that i'm using is as follows:

    Set con = New ADODB.Connection
    con.ConnectionString = _
        "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
        "DefaultDir=" & txtDir.Text
    con.Open
   
    SQLStr = "Select * FROM " & txtFile.Text & " WHERE 1 = '2006/11/15'"

The format of the file is as follows and has over 65535 lines (currently at 4Mb and growing on a daily basis):

2006/05/25;08:17:37;0;1;0;0;1
2006/05/25;08:17:40;0;1;0;0;1
2006/05/25;08:17:44;0;1;0;0;1
2006/05/25;08:18:26;0;1;0;0;0
2006/05/25;08:18:42;0;1;0;0;0


I would like to be able to search for results using the first two fields using SQL statements. Please note however that the CSV file does not have a header (is this a problem??).


Any sample code for this would be appreciated.

Regards,
robbrownuk

0
Comment
Question by:robbrownuk
  • 3
  • 3
7 Comments
 
LVL 65

Expert Comment

by:rockiroads
ID: 17948346
Have u considered linking this csv file into MS Access (linked table, not import) then running access queries?
or import into another db?

Not sure what default fields are, is it F1, F2, F3 ? try that
0
 
LVL 29

Accepted Solution

by:
leonstryker earned 125 total points
ID: 17948448
Take a look here: http://www.carlprothman.net/Default.aspx?tabid=90#ODBCDriverForText

I n your sample you are using ; as a seperator so you will need to use schema.ini file and set:

Format=Delimited(";")

You do not need column headers but will need to specify that in your schema.ini and can refer to the columns by their order as F1, F2, and so on.

Leon
0
 
LVL 29

Expert Comment

by:leonstryker
ID: 17948455
You could also use the Jet driver, which not require you to use a schema.ini file:

http://www.carlprothman.net/Default.aspx?tabid=87#OLEDBProviderForMicrosoftJetText

Leon
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 2

Author Comment

by:robbrownuk
ID: 17949304
Thanks leonstryker,

Your second suggestion seems to be a step in the right direction, However it only works if i use a comma instead of the semicolon.

Also I cant seem to filter the records for a specific date. I have the following code which returns no results:

  cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & PathtoTextFile & ";" & _
          "Extended Properties=""text;HDR=YES;FMT=Delimited"""
 
  Dim FilterDate As Date
  FilterDate = CDate("24/05/2006")
 
  rs.Open "select * from log2.txt WHERE 0 = " & FilterDate, _
          cn, adOpenStatic, adLockReadOnly, adCmdText

 
  'Make sure we have some records to display
  If rs.EOF Then GoTo NoData
 
  MsgBox rs(0)
 
NoData:
  rs.Close
  cn.Close


Anymore suggestions??

Thanks,
robbrownuk
0
 
LVL 29

Expert Comment

by:leonstryker
ID: 17949359
Well, this:

WHERE 0 = " & FilterDate

is guarantied to return you nothing, since FilterDate is never going to be 0

>it only works if i use a comma instead of the semicolon.

Right, because CSV implies that it is a Comma Seperated Values. In your case its just a text file with CVS extension.

>HDR=YES

In you case the HDR should be NO, since you have no header row.

Leon
0
 
LVL 2

Author Comment

by:robbrownuk
ID: 17951675
> WHERE 0 = " & FilterDate

> is guarantied to return you nothing, since FilterDate is never going to be 0

I was under the impression that "0" represents field 0 (the date). So, how do you run queries on a CSV without any headers (i.e. how do you reference the data columns)?


---
robbrownuk
0
 
LVL 2

Author Comment

by:robbrownuk
ID: 17954419
Thanks again leonstryker,

You pointed me in the right direction with your first post, so the points are yours...

The "Microsoft Text Driver" with the schema.ini file work very well. For info, here is what my schema.ini file contains:-

============================
[log.txt]
ColNameHeader=False
Format=Delimited(;)
MaxScanRows=0
CharacterSet=OEM
Col1=F1 Char Width 10
Col2=F2 Char Width 8
Col3=F3 Char Width 1
Col4=F4 Char Width 1
Col5=F5 Char Width 1
Col6=F6 Char Width 1
Col7=F7 Char Width 1
============================

Thanks!
robbrownuk
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction In a recent article (http://www.experts-exchange.com/A_7811-A-Better-Concatenate-Function.html) for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now