DOBON.NET DOBON.NETプログラミング掲示板過去ログ

CSVファイルの取り込み

環境/言語:[Windows2000,VB6]
分類:[VB6以前]

お世話になります。初めての投稿です。

以下の通りCSVファイルを読み込んでいるのですが。

---------------------------------------------------------
Dim strSQL As String
Dim strCnn As String
Dim rst As New ADODB.Recordset

strSQL = "SELECT * FROM TEST#csv;"
strCnn = "Provider=MSDASQL;" & _
"Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DefaultDir=C:\TEST;"

rst.Open strSQL, strCnn

Do Until rst.EOF
Debug.Print rst!NO & "," & rst!CODE & "," & rst!NAME
rst.MoveNext
Loop

rst.Close: Set rst = Nothing
---------------------------------------------------------

読み込み自体には問題ないのですが、一部の項目だけが勝手に変換
されてしまいます。

txtファイルにF0001という文字列が、勝手に1と数値に
なってレコードセットに格納されてしまうようなのです…。

(TAB区切りのテキストファイル)
NO,CODE,NAME
1,AA,F0001
2,BB,F0002
3,CC,F0003
4,DD,F0004
5,EE,F0005


(↑のデータを読み込むとなぜか…)
1,AA,1
2,BB,2
3,CC,3
4,DD,4
5,EE,5


この変換される文字列をtxtファイルでダブルコーテーションで
くくると問題なく抽出できるのですが…。

なぜこうなってしまうのか、どなたかご存知あれば教えてください。
よろしくお願いします。
こんにちは、じゃんぬ です。

■No11611に返信(茶太郎さんの記事)
> txtファイルにF0001という文字列が、勝手に1と数値に
> なってレコードセットに格納されてしまうようなのです…。

文字列とするなら、二重引用符で囲まないとダメですよ。
じゃんぬねっとさん、ありがとうございました。

きちんと二重引用符で囲んで再度やってみます。
でも、なぜ同じような文字列でも問題なく格納されるのもと
されないものとがあるのでしょうか?

だからこそきちんと二重引用筆囲むのでしょうね…。
■No11617に返信(茶太郎さんの記事)
> でも、なぜ同じような文字列でも問題なく格納されるのもと
> されないものとがあるのでしょうか?
今回の例だと、先頭F+数値は数値と認識されるからです。
はいこーんさん、ありがとうございます。

> 今回の例だと、先頭F+数値は数値と認識されるからです。

先頭F+数値が特別なのですか?
いろいろ試していたのですが、どうも先頭F+数値でなく
先頭文字+数値では問題なく文字列としてとれました。
※先頭文字(A,B,C,D)は文字列としてとれました。

どういうことでしょうか?
# 回答に非ず。

> この変換される文字列をtxtファイルでダブルコーテーションで
> くくると問題なく抽出できるのですが…。

その方法で CSV を読み込む時は、SCHEMA.INI を利用して、
各列のデータ型を明示的にに指定するようにしましょう。

SCHEMA.INI による型の指定がない場合、レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\MaxScanRows (型決定のためのスキャン行数)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\ImportMixedTypes (データ型混在時の規定の型)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format (テキスト形式)
などを元にして型が決定されます。
魔界の仮面弁士さん、ありがとうございます
SCHEMA.INI を利用して試してみたところ、うまくいきました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板