Solved

Using ADO to open a CSV File...

Posted on 2006-11-15
7
2,628 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

733 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