こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelVBAでODBCドライバを使ってCSVファイルにアクセスしようとしています。

こんにちは。

いろいろとネットを探したのですが、詳細を見つけられなかったので質問することにしました。

内容は、ExcelVBAで[ODBC Text Driver]を使って、CSVファイルにアクセス(SQL構文のSELECT文で取得)するというものです。

そんな中、ある条件でエラーが発生してしまい、(解説がまったくないため)手詰まりになってしまいました。

Dim MyDb As ADODB.Connection
Dim MyRs As ADODB.Recordset
Dim MySql As String

Set MyDb = CreateObject("ADODB.Connection")
MyDb.Open "Driver={Microsoft Text Driver (*.txt; *.csv)}; DBQ=c:\temp; ReadOnly=1"
MySql = "SELECT * FROM test.csv"
MySql = MySql & " WHERE a ='" & strA & "'"
MySql = MySql & " AND b ='" & strB & "'"
MySql = MySql & " AND c ='" & strC & "'"
Set MyRs = MyDb.Execute(MySql) <---- エラー発生!!!

エラーは、
 実行時エラー '-2147217913 (80040e07)':
 [Microsoft][ODBC Text Driver]抽出条件でデータ型が一致しません。
です。

抽出条件のa, b, cをそれぞれ個別に条件として設定したところ、
a…NG
b…OK
c…OK
であることが分かりました。

元々のCSVファイルは、文字フィールドが"(ダブルコーテーション)で囲まれておらず、『文字のフィールドなのか、数値のフィールドなのか区別できないでいるのか?』という疑問が生まれました、が調べようにも解説を見つけられず…。

このエラーの原因がお分かりの方、もしくは解説サイトをご存知の方、いらっしゃいましたら回答ください。

よろしくお願いします。

投稿日時 - 2009-01-08 15:06:23

QNo.4613715

困ってます

質問者が選んだベストアンサー

試しにこちらの環境でtest.csvを
a, b, c
1, XXXX, YYYY
Z, SSSS, TTTT
として実行したら、エラーは発生しませんでしたが、
a, b, c
1, XXXX, YYYY
2, SSSS, TTTT
として実行したところ、同じエラー80040e07が発生しました。質問者さんの推測通り、文字列のカラムを数値と認識しているせいかもしれません。
c:\tempにschema.iniという名前のテキストファイルを作成し、そこでtest.csvのファイルレイアウトを定義してみて下さい。
【schme.iniの例】
[test.csv]
ColNameHeader=True
Format=CSVDelimited
Col1=A Char Width 255
Col2=B Char Width 255
Col3=C Char Width 255

投稿日時 - 2009-01-09 01:54:24

補足

schema.iniですか、なるほど。
一度試してみます。

投稿日時 - 2009-01-09 08:08:43

お礼

連絡遅くなりました。
その後もschema.iniの設定で試行錯誤ありましたが、ようやく完成しました。
ありがとうございました。

投稿日時 - 2009-01-19 11:09:34

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問