Я пытаюсь использовать 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."
Похоже, что версия macix для unixODBC устанавливает все в / opt / local /. Я поместил odbcinst.ini в / opt / local / etc / и создал в своем домашнем каталоге файл .odbc.ini, который выглядит примерно так (обратите внимание, что я экспериментировал с UID против USERNAME и PWD против ПАРОЛЬ):
[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]
И я написал и скомпилировал эту программу на Haskell:
import Database.HDBC.ODBC
import Database.HDBC
import System
main = do
args <- getArgs
c <- connectODBC (args!!0)
tables <- getTables c
mapM_ putStrLn $ tables
Когда я пытаюсь указать DSN "DSN = myodbc", он выдает ошибку:
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 «DSN = myodbc; UID = [скрытый]; PWD = [скрытый]», в нем перечислены все таблицы в базе данных.