VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/12/12(Fri) 13:51
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^5: EXCEL形式のファイルをADOで

# 以下、ADO + OLE DB Provider for Microsoft Jetの場合について回答していますが、
# DAO や ODBC による接続の場合も、設定項目に関しては同様です。


事前準備:
1. レジストリエディタで、以下の項目を開きます。(Jet 4.0系の場合)
     HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

2. "ImportMixedTypes" が "Majority Type" に設定されていた場合は、
    "Text" に修正しておいてください。既定値は"Text" です。
    ("Majority Type"の場合、データ型は多数決的に決定されます)

3. "TypeGuessRows" を 0 に設定してください。規定値は 8 です。
    これは、データ型判定に利用される行数を示します。0は全行走査です。


コード:
  拡張プロパティのIMEXフィールドに 1 を指定して、"Import mode"である事を明示します。

    Dim Cn As ADODB.Connection
    Dim RS As ADODB.Recordset
    
    Set Cn = New ADODB.Connection
    Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    Cn.Properties("Extended Properties").Value = "Excel 8.0; IMEX=1"  '☆ここが重要
    Cn.Open "C:\Book1.xls"
    Set RS = Cn.Execute("[Sheet1$]", , adCmdTable)


なお、レジストリの該当項目を編集すると、他のJETアプリケーションのExcel IISAMの
設定に影響します。通常は、この値を編集しても他のアプリへの悪影響はありませんが、
もし、システム全体に影響させたく無い、という場合は、
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0
以下の設定を、別のキー名…たとえば
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\Orator
などにコピーしておき、コピーした側の設定を編集してください。

その上で、その設定を "Jet OLEDB:Registry Path"ダイナミックプロパティに渡せば、
カスタム設定のレジストリ項目が利用される事になります。
(DAOでいうところの、DBEngineオブジェクトのIniPathプロパティに相当する機能です)

  Set Cn = New ADODB.Connection
  Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
  Cn.Properties("Jet OLEDB:Registry Path").Value = "SOFTWARE\Microsoft\Jet\Orator"


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -