Help us understand the problem. What is going on with this article?

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

概要

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で取得できないので暗号化してもこのコードで問題ありません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away