プロが教えるわが家の防犯対策術!

こんにちは。

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

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

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

よろしくお願いします。

A 回答 (1件)

試しにこちらの環境で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

この回答への補足

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

補足日時:2009/01/09 08:08
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/19 11:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!