tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルADOでのCSVの読込
記事No15003
投稿日: 2010/10/28(Thu) 15:46
投稿者IMA
あるCSVファイルをADOにて開こうとしています

    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & sPath & ";" & _
                    "Extended Properties='Text;HDR=YES;FMT=Delimited'"
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open "SELECT * FROM [" & sFileName & "];", cn
    Set DataGrid1.DataSource = rs

ここで問題なのは、下記のようなデータがあると
PA9632が空白となってしまいます。

123456,伊藤博文
234567,吉田茂
345678,大隈重信
PA9632,Henry.R

項目全てを引用符で囲むとOKなのですが、上記のような単なるカンマ区切りでも
接続文字列指定などを変えることで、そのまま正しく読み込みたいのですが・・

追加コメント:
 有るDBが吐き出したCSVファイルは全ての項目が引用符で囲んでありますが、
 データを修正するためにEXCELに読込み列の入れ替えや等を行っています。

 これをEXCELでCSV出力すると引用符が無い状態で出力されます。
 → 仕様ですね。

 EXCELのマクロや、エディタで引用符で囲む事は可能ですが、少し面倒なので・・・

 ADOの仕様でNGで有れば、CSVファイルをVB内で引用符付加すれば良いだけですが・・・

よろしくお願いします。

[ツリー表示へ]
タイトルRe: ADOでのCSVの読込
記事No15004
投稿日: 2010/10/28(Thu) 16:14
投稿者YK
こんにちは

> ここで問題なのは、下記のようなデータがあると
> PA9632が空白となってしまいます。
>
> 123456,伊藤博文
> 234567,吉田茂
> 345678,大隈重信
> PA9632,Henry.R
>
このような場合は
schema.ini
ファイルを参照されてはどうでしょう。

[ツリー表示へ]
タイトルRe: ADOでのCSVの読込
記事No15005
投稿日: 2010/10/28(Thu) 16:17
投稿者魔界の仮面弁士
> ここで問題なのは、下記のようなデータがあると
> PA9632が空白となってしまいます。

一般的には、CSV と同じディレクトリに schema.ini ファイルを用意して、
その列が(数値型ではなく)文字列型であることを明示することになります。

schema.ini は Text ODBC ドライバの設定画面で作成することもできますし、
メモ帳等で自作しても OK です。


この schema.ini の指定が無い場合には既定の型判定が行わていれます。

もし、この既定の動作を変更したいのであれば、レジストリの
 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\
の下に、文字列(REG_SZ)キー「ImportMixedTypes」を用意してください。
その値を "Text" にすれば、テキスト型固定で読み込まれるようになります。

ただし、このレジストリ設定は、PC 全体に対して及ぶことになります。

他のアプリに影響を与えず、自アプリの既定の動作のみを変更したい場合には、
 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\ImportMixedTypes
を、HKEY_LOCAL_MACHINE 内の任意の場所、たとえば
 HKEY_LOCAL_MACHINE\SOFTWARE\IMA\Project1\1.0\Text\ImportMixedTypes
として用意しておき、接続文字列に
 "Jet OLEDB:Registry Path=SOFTWARE\IMA\Project1\1.0;"
を追加するという手法もあります。


> ADOの仕様でNGで有れば
これは ADO の機能では無く、JET I-ISAM の機能です。そのため、
DAO を使って読み込んだ場合にも、同様に schema.ini が必要になります。

(ちなみに DAO では、DBEngine.IniPath でレジストリキーを指定できます)

[ツリー表示へ]
タイトルRe^2: ADOでのCSVの読込
記事No15008
投稿日: 2010/10/28(Thu) 18:25
投稿者IMA
YKさん、魔界の仮面弁士さん
早速のresありがとうございました。

> schema.ini は Text ODBC ドライバの設定画面で作成することもできますし、
> メモ帳等で自作しても OK です。

schema.ini・・・ 確かにこれですね。
昔、同じ事でしらべて使ったことを思い出しました。
→すっかり忘れていました。

特に、魔界の仮面弁士さんには、詳しい背景やレジストリ設定なども解説いただき
勉強になりました。

改めて、お礼申し上げます。

[ツリー表示へ]