1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?