2009-08-30 19 views
3

Haskell(バージョン6.10.3)とHDBCを使用してMySQLデータベースに接続しようとしています。私はHaskell ODBCを使ってこれを行うことにしました。私はHDBC(2.1.1)とHDBC-ODBC(2.1.0.0)をインストールするためにCabalを使いました。 MySQL ODBCドライバ(5.1.5)をダウンロードしてインストールしました。私はmacportsを使ってunixODBC(2.2.14_1)をインストールしました。このすべてはMac OS X(10.5.8)の上にあります。Haskell、HDBC、ODBC、MySQL、Mac OS X

私はほとんどこのページの指示を使用していますhttp://en.wikibooks.org/wiki/Haskell/Database。この時点で:

"#odbcinst.iniファイル($ ODBC_HOME/etc /)およびデータソースを$ HOME/.odbc.iniに追加します。

macports版のunixODBCは、/ opt/local /にあるすべてのものをインストールするようです。私はodbcinst.iniを/ opt/local/etcに入れて、私のホームディレクトリに.odbc.iniを作成しました。このようなものがあります(UID対USERNAMEとPWDを比較したことに注意してくださいPASSWORD):私はこのHaskellのプログラムを書かれ、コンパイルした

 
[ODBC Data Sources] 
myodbc = MySQL ODBC 5.1 Driver 

[ODBC] 
Trace   = 0 
TraceAutoStop = 0 
TraceFile  = 
TraceLibrary = 

[myodbc] 
Driver  = /usr/local/lib/libmyodbc5.so 
DATABASE = [hidden] 
DESCRIPTION = [hidden] 
SERVER  = localhost 
PORT  = 3306 
UID   = [hidden] 
PWD   = [hidden] 
PASSWORD = [hidden] 
USER  = [hidden] 

そして:

 
import Database.HDBC.ODBC 
import Database.HDBC 
import System 

main = do 
    args <- getArgs 
    c <- connectODBC (args!!0) 
    tables <- getTables c 
    mapM_ putStrLn $ tables 

私は "DSN = MyODBCを" それエラーのDSNを試すとき:

 
Database: SqlError 
    {seState = "[\"HY000\"]", 
    seNativeError = -1, 
    seErrorMsg = "connectODBC/sqlDriverConnect: 
     [\"1045: [unixODBC][MySQL][ODBC 5.1 Driver]Access 
     denied for user 'jamie'@'localhost' (using password: YES)\"]"} 

しかし、 "DSN = myodbc; UID = [hidden]; PWのDSNを試してみるとD = [hidden] "とすると、データベース内のすべてのテーブルが一覧表示されます。

+0

これはhttp://software.complete.org/software/issues/show/106とぼんやりと似ていますが、runghcをコンパイルするのではなく、 ".so/.DLLをロードできません:odbc "、私のテストのすべてはコンパイルされたバージョンで行われています。 –

答えて

1

これは、Haskell/HDBC/HDBC-ODBCの問題ではなく、unixODBCの問題である可能性があります。 "isql myodbc"を実行すると "Bus Error"が発生します。 "isql -v myodbc"を実行しても、これ以上の情報は得られません。 isql [uid] [pwd]を実行するだけで問題ありません。

0

iodBCは、my employerによって維持管理され、Jaguar(10.2.x)以降Mac OS Xの一部として出荷されています。

UnixODBCに移行するよりも、updating iODBC with all the latest patches(Appleはこれに少し後れがちである傾向があります)の方がよいでしょう。

これは、Mac OS Xのデフォルトのファイルの場所にすべてのODBCの設定を維持するために、一般的にお勧めします -

/Library/ODBC/odbc.ini 
/Library/ODBC/odbcinst.ini 
/Users/*/Library/ODBC/odbc.ini 
/Users/*/Library/ODBC/odbcinst.ini 

あなたがどこか他からのシンボリックリンクを作成することができますが、例えば、これらのファイルを持っている場合があります -

ln -s ~/Library/ODBC/odbc.ini ~/.odbc.ini 

最後に、あなたは、MySQL、such as one of my employer's offerings(ダウンロードの一部として提供される2週間の無料トライアル)のために、市販のODBCドライバでテストから利益を得ることができます。