LoginSignup
3
6

More than 5 years have passed since last update.

Python3でFileMaker11ServerAdvancedへODBC接続

Last updated at Posted at 2016-07-18

環境

サーバ

FileMaker 11 server Advanced

クライアント

Visual Studio Community 2015 (Python toolsインストール済)
Anaconda 32bit(odbcドライバの関係で必ず32bitでなければならない。インストール時に工夫すれば32bitと64bitは併存出来る)

https://www.continuum.io/downloads

こちらの方を参考にしました。
http://qiita.com/kyo-bad/items/75d88ce77660e3fa158c

設定

FileMakerServer

・FileMaker Serverはadvancedバージョンであること(通常版はODBC接続が出来ない)
・ODBCの設定や対象のファイルに共有設定等も行っているものとする

Python3

・Anaconda 32bitを使用(FileMaker11ではODBCドライバが32bitしかなかったので)

・もしAnacondaの64bitがメインとしてインストールされている場合、
  ツール(T) -> オプション(O)...
  Python Tools->Environment Options
 で新しく32bitの設定を作って、
  プロジェクト(P) -> (プロジェクト名)のプロパティ(E)...
  General -> Interpreter:
 を作った設定にする。

ODBC

・FileMakerに同封のODBCインストーラでインストール

http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9170/~/filemaker-11-での-odbc-および-jdbc-クライアントドライバのインストール

・DSNを設定する場合は、64bitではなく32bitで設定すること「C:\Windows\SysWOW64\odbcad32.exe」で設定が可能。(必ずしも必要な作業ではない)

http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9974/~/64-ビット版-windows-環境での-odbc-接続について

コード

成功

事前準備としてpypyodbcをインストールしておくこと。

コマンドプロンプト
%windir%\system32\cmd.exe "/K" "C:\Anacondaインストール先\Scripts\activate.bat" "C:\Anacondaインストール先"
pip install pypyodbc
Python3
#!/usr/bin/env python
# -*- coding: utf-8 -*-
###coding: utf-8 の部分は、書類のコーディングに依存する
###ファイル(F)->保存オプションの詳細設定(V)...
###で書類のコーディングが変更可能
###この場合「Unicode(UTF-8シグネチャなし)-コードページ65001」
###SHIFT-JISの場合はcp932
import pypyodbc

def pypy():
    cnn = pypyodbc.connect('DRIVER={FileMaker ODBC};SERVER=192.168.XXX.XXX:2399;UID=USER_NAME;PWD=PASSWORD;DATABASE=ファイルメーカー.fp7')
    cur = cnn.cursor()
    #日本語フィールドの場合、かならずダブルクォーテーションで囲む必要があります。
    cur.execute("SELECT \"ID\",\"名前\" from \"テーブル名\" WHERE \"ID\" = 番号")
    rows = cur.fetchall()
    for row in rows:
        print(row[1])
    cur.close()
    cnn.close()

if __name__ == "__main__":
    pypy()

・文字コードはutf-8でもcp932でも良いが、# -- coding: utf-8 --の部分を合わせること。

失敗

もしかしたら、自分の設定が間違っていただけなのかもしれないが、下記設定ではプログラムが通らなかった。特に日本語が絡むと通りにくくなる。

pyodbc

Python3
import pyodbc

pyodbc.connect(接続)で、接続は出来たが、
cursor.execute(クエリ)で日本語フィールドが含まれる場合、どうしても
'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte
といったエラーが発生して取得ができなかった(.encode('utf-8')等でエンコード、デコードしたり、書類のコーディングを変えても同じ)

ADO

Python
import win32com.client
#DBConnection=win32com.client.Dispatch('ADODB.Connection')        
#DBConnection.Open(ConnectionString) 

コードは通るが、XXX.Fields.Item(i).Valueで文字列の値が全く拾えない

PyFileMaker

Python3未対応

3
6
0

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
3
6