Haskell (バージョン 6.10.3) と HDBC を使用して MySQL データベースに接続しようとしています。Haskell ODBC を使用することにしました。cabal を使用して HDBC (2.1.1) と HDBC-ODBC (2.1.0.0) をインストールしました。MySQL ODBC ドライバー (5.1.5) をダウンロードしてインストールしました。macports を使用して unixODBC (2.2.14_1) をインストールしました。これらすべてが Mac OS X (10.5.8) の上にあります。
私は主にこのページhttp://en.wikibooks.org/wiki/Haskell/Databaseの手順を使用しています。この時点で:
"# mysql ドライバーを odbcinst.ini ファイル ($ODBC_HOME/etc/ の下) に追加し、データ ソースを $HOME/.odbc.ini に追加します。"
unixODBC の macports バージョンは /opt/local/ の下にすべてをインストールするようです。/opt/local/etc/ に odbcinst.ini を配置し、ホーム ディレクトリに次のような .odbc.ini を作成しました (UID と USERNAME および PWD とパスワード):
[ODBC データ ソース] myodbc = MySQL ODBC 5.1 ドライバー 【ODBC】 トレース = 0 TraceAutoStop = 0 トレースファイル = トレース ライブラリ = [myodbc] ドライバー = /usr/local/lib/libmyodbc5.so データベース = [非表示] 説明 = [非表示] サーバー = ローカルホスト ポート = 3306 UID = [非表示] PWD = [非表示] パスワード = [非表示] ユーザー = [非表示]
そして、私はこのHaskellプログラムを書いてコンパイルしました:
インポート データベース.HDBC.ODBC データベースのインポート.HDBC インポートシステム メイン = する args <- getArgs c <- connectODBC (args!!0) テーブル <- getTables c mapM_ putStrLn $ テーブル
「DSN=myodbc」の DSN を試すと、次のエラーが発生します。
データベース: SqlError {seState = "[\"HY000\"]", seNativeError = -1、 seErrorMsg = "connectODBC/sqlDriverConnect: [\"1045: [unixODBC][MySQL][ODBC 5.1 ドライバー]アクセス ユーザー 'jamie'@'localhost' の拒否 (パスワードを使用: YES)\"]"}
ただし、「DSN=myodbc;UID=[hidden];PWD=[hidden]」という DSN を試すと、データベース内のすべてのテーブルが一覧表示されます。