LoginSignup
1
2

More than 3 years have passed since last update.

VBAからADOで接続してFileMakerからデータを持ってくる

Last updated at Posted at 2020-01-14

概要

VBAでFileMakerのデータを扱いたかったのですが
ODBCでエクセルメニューのデータ→外部データの取り込み 
あたりの情報しか出てこずADOで接続しSQLでデータを抽出したかったので同じ悩みを抱えている方がいたらこの説明で助けになれば嬉しいです。

前提

@tyumaさんがFileMakerのODBC設定について詳しく説明して下さっている
【FileMaker】もうエクスポートはしない。ExcelからFileMakerのデータを持ってくる!
[ODBCデータソース(DSN)を作成する]までの作業が終わっている前提でご説明します。

VBAコードは下記のサイトを参考にしました。
データベース(Oracle)に接続する(ODBC を使用)

サンプルVBAソース

    Sub Sample_ODBC_oracle()

        Dim oraCon As ADODB.Connection
        Dim oraRs As ADODB.Recordset
        Dim constr As String
        Dim strSQL As String
        Dim col As Long
        Dim row As Long

        Const DSN = "ODBC For Fm"                     'データソース名
        Const USERNAME = "test"                       '接続するデータベースのユーザー名
        Const PASSWORD = "test"                       'パスワード

        Set oraCon = New ADODB.Connection

        'データソース名を指定する
        constr = "DSN=" & DSN
        constr = constr & ";UID=" & USERNAME
        constr = constr & ";PWD=" & PASSWORD

        oraCon.ConnectionString = constr
        oraCon.Open


       '※テーブル名やカラム名が日本語の場合はダブルコーテーション(")で囲わないといけないです
        '1、テーブルから全てのカラムのデータを取得
        strSQL = "SELECT * FROM ""テーブル1"""

        '2、結合して全てのカラムのデータを取得
        strSQL = "SELECT * FROM ""テーブル1"" INNER JOIN ""テーブル2"" ON ""テーブル1"".""カラム1"" = ""テーブル2"".""カラム2"""


        Set oraRs = New ADODB.Recordset
        oraRs.Open strSQL, oraCon

        With Worksheets("Sheet1")

            .Cells.Clear

            'フィールド名
            For col = 0 To oraRs.Fields.count - 1
                .Cells(1, col + 1) = oraRs(col).Name
            Next col

            'レコード
            Do Until oraRs.EOF
                For col = 0 To oraRs.Fields.count - 1
                    .Cells(row + 2, col + 1) = oraRs(col).Value
                Next col
                row = row + 1
                oraRs.MoveNext
            Loop

        End With

        oraRs.Close
        oraCon.Close
        Set oraCon = Nothing

    End Sub

FileMakerで作成した仮想テーブルも1、や2、のSQLと同じような書き方でデータを取得できます。

注意点

ただ残念なことが1つ。FileMakerからデータを取得するにはデータを取得したいFileMakerのファイルを起動していないと取得することができません。
なのでFileMakerのファイルを暗号化したとしてもファイルを開いてからでないとVBAで取得できないので暗号化してもこのコードで問題ありません。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2