sql >> データベース >  >> RDS >> Access

Excelデータソースの接続文字列パラメータ

    Excelデータソースの接続文字列パラメータ

    前回の記事では、ExcelとテキストファイルをDAOを使用してデータベースであるかのように扱う方法と、リンクせずに開く方法について説明しました。それらはODBCドライバーを使用しないため、それらの接続文字列は、ODBC接続文字列で見慣れているものとはまったく異なる形式になります。 Excel接続文字列パラメータに関するドキュメントが不足しています。これは、いくつかのギャップを埋め、パラメータの影響について話し合うための最善の努力です。

    Excel接続文字列パラメータ

    3つの異なるデータソースの「タイプ」がありますが:

    1. Excel 8.0 :97-2003xlsファイル
    2. Excel 12.0 :xlsbファイル
    3. Excel 12.0 Xml :xlsxファイル

    それらはすべて同じパラメータを使用します。

    パラメータのリストは次のとおりです。

    HDR パラメータ:ヘッダー行

    はい :最初の行はヘッダーであり、「テーブル」/「レコードセット」の列名になる必要があります
    NO :最初の行は同じように扱われ、単なるデータです。すべての列名には「FN」という名前が付けられます。「N」は1で始まる数字です

    IMEX パラメータ:インポート/エクスポート動作

    これは、内容に基づいて列のデータ型を定義する方法を管理します:
    1 :列に異なるデータ型が含まれている場合は、文字列として扱います。それ以外の場合は、列を最適なデータ型に一致させます。
    2 :サンプルに基づいて、列を常に特定のデータ型に一致させます。予想されるデータ型と一致しないデータを含む行を読み取るときに、読み取りエラーが発生する可能性があります。

    ACCDB パラメータ:AccessがACCDBファイル形式を使用していることを示しますか?

    デフォルトでは、これは常にaccdbファイル形式でACCDB=YESに設定されます。ただし、省略したり、NOに設定したりしても何も起こらないようです。少し謎です。このパラメータの影響を誰かが共有できる場合は、コメントで投稿してください。ブログを更新します。

    データベース:Excelワークブックへのパス

    パラメータには、ブックの名前を含む完全修飾パスが含まれている必要があります。

    最小動作接続文字列

    DATABASEは、データ型sourceキーワードに加えて、唯一の必須パラメーターであることに注意してください。したがって、最小の有効な接続文字列は次のようになります。

    Excel 8.0; DATABASE =C:\ Links \ Products.xls

    接続文字列でシートまたは範囲を指定する

    前のサンプルでは、​​シートが「 DAO.TableDef」を表していることがわかりました。 「。ただし、「 Tabledef」になることができるのはワークシートだけではありません。 「。 Excelスプレッドシートに名前付き範囲が含まれている場合、名前付き範囲は「 Tabledef」として報告されます。 " 同じように。さらに、セルアドレスを使用してシート内の任意のブロックを「クエリ」できます。例:

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    
    Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
    Set rs = db.OpenRecordsset("Sheet$1A1:A3")
    
    Debug.Print rs.Name, rs.Fields.Count

    セルアドレスはシートの使用範囲を超えることはできないことに注意することが重要です。たとえば、 Products.xlsx 実際にはA1:B3にのみコンテンツがあります。つまり、Sheet1 $ A1:D5を使用してレコードセットを開いた場合でも、フィールド数は2つ、レコード数は3つしか得られません。余分な空白の列/行は単に無視されます。反対に、 A1:B3の外側のどこかでセルを汚した場合 、シートの UsedRange これで、より大きくなり、クエリには空白の列と行が含まれるようになります。

    したがって、これらはExcelの「データベース」でのクエリで使用する有効な名前です。

    1. Sheet1 $ –ワークシートの使用範囲全体。
    2. Sheet1 $ A1:B4 –内容が入力されている場合、2列と3行(ヘッダーは含まない)のみ。そうしないと、列または行が要求よりも少なくなる可能性があります。
    3. ProductsRange –その名前の名前付き範囲。

    ユーザーが新しい列または行を挿入したが名前付き範囲の内容を変更しなかったために範囲が移動した場合は特に、コード内のアドレスをハードコーディングしないようにするため、実用的な名前付き範囲を使用する方がはるかに良いと思います。 。ただし、特にサードパーティからスプレッドシートを受け取っているため、その内容や形式を制御できない場合は、必ずしも実用的とは限りません。この場合、SQLクエリの記述も機能します。

    Excelデータソースのクエリ

    形式を制御できず、特定の列と行が実際に存在すると確信している場合でも、絶対アドレスに依存したくないとします。そのような状況では、最善の方法はクエリを実行することです。行を1つだけ選択する例を次に示します。

      Dim db As DAO.Database
      Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
    
      Dim rs As DAO.Recordset
      Set rs = db.OpenRecordset("SELECT d.[Count] FROM [Sheet1$] AS d WHERE d.[Products] = 'Bananas';")
      Debug.Print rs.Fields(0).Value

    うまくいけば、これは、各行を繰り返して「バナナ」が含まれている行を見つけ、列を右に読んでカウントを取得するよりもはるかに簡単であることがわかります。この場合、クエリはExcelの自動化よりも優れています。

    結論

    DAOを使用すると、Excelデータソースを操作して、リレーショナルデータソースであるかのように見せかけ、Excelを自動化する一連のVBAコードを記述して、必要なデータ。接続文字列のパラメータは非常に単純で、パスがあれば、Excelスプレッドシートをリンクしたり開いたりするのに適しています。

    次の記事では、テキストファイルの接続パラメータについて説明します。


    1. ハイブリッド環境でのPostgreSQLの監視

    2. Oracle SQL Developer:失敗-テストに失敗しました:ネットワークアダプタが接続を確立できませんでしたか?

    3. sysdateを使用したto_date関数

    4. トップ30の最も有用な並行マネージャークエリ