3

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 を試すと、データベース内のすべてのテーブルが一覧表示されます。

4

2 に答える 2

1

これは、Haskell / HDBC / HDBC-ODBC の問題ではなく、unixODBC の問題である可能性があります。「isql myodbc」を実行すると、「バス エラー」が発生します。「isql -v myodbc」を実行しても、それ以上の情報は得られません。isql [uid] [pwd] を実行すると問題なく接続されます。

于 2009-08-31T09:08:17.877 に答える
0

私の雇用主によって維持およびサポートされている iODBC は、Jaguar (10.2.x) 以降、Mac OS X の一部として出荷されています。

UnixODBC に移行するよりも、最新のパッチをすべて適用して iODBC を更新する方がよいでしょう(Apple はこれらのパッチで少し遅れをとっている傾向があります)。

通常は、すべての ODBC 構成を Mac OS X の既定のファイルの場所に保持することをお勧めします --

/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 用の市販の ODBC ドライバー(ダウンロードの一部として提供される 2 週間の無料試用版)の 1つなど、MySQL 用の商用 ODBC ドライバーでテストすることをお勧めします。

于 2012-11-12T18:21:51.890 に答える