2009-08-30 8 views
3

J'essaie d'utiliser Haskell (version 6.10.3) et HDBC pour me connecter à une base de données MySQL. J'ai choisi de le faire avec Haskell ODBC. J'ai utilisé cabal pour installer HDBC (2.1.1) et HDBC-ODBC (2.1.0.0). J'ai téléchargé et installé le pilote MySQL ODBC (5.1.5). J'ai utilisé macports pour installer unixODBC (2.2.14_1). Tout cela sur Mac OS X (10.5.8). J'ai surtout utilisé les instructions sur cette page http://en.wikibooks.org/wiki/Haskell/Database. À ce stade:Haskell, HDBC, ODBC, MySQL et Mac OS X

"# Ajoutez le pilote mysql au fichier odbcinst.ini (sous $ ODBC_HOME/etc /) et votre source de données dans $ HOME/.odbc.ini."

Il semble que la version macports d'unixODBC installe tout sous/opt/local /. J'ai placé un odbcinst.ini dans/opt/local/etc/et j'ai créé un .odbc.ini dans mon répertoire personnel qui ressemble à ceci (notez que j'ai expérimenté avec UID vs. USERNAME et PWD vs MOT dE PASSE):

 
[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] 

et j'ai écrit et compilé ce programme Haskell:

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

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

Lorsque je tente une source de données de "DSN =" MyODBC il des erreurs avec:

 
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)\"]"} 

Cependant, lorsque j'essaie un DSN de "DSN = myodbc; UID = [hidden]; PW D = [hidden] ", il liste toutes les tables de la base de données.

+0

Il semble vaguement similaire à ce http://software.complete.org/software/issues/show/106 sauf que si j'essaye runghc au lieu de compiler des erreurs avec "ne peut pas charger .so/.DLL pour : odbc ", donc tous mes tests ont été avec une version compilée. –

Répondre

1

Cela peut être un problème unixODBC plutôt qu'un problème Haskell/HDBC/HDBC-ODBC. L'exécution de "isql myodbc" entraîne une "erreur de bus". Lancer "isql -v myodbc" ne donne plus d'informations. Exécuter isql [uid] [pwd] se connecte très bien.

0

iODBC, géré et pris en charge par my employer, a été livré dans le cadre de Mac OS X depuis Jaguar (10.2.x). Vous serez mieux lotis updating iODBC with all the latest patches (Apple a tendance à être un peu en retard sur ces derniers), que de passer à UnixODBC.

Il est généralement préférable de garder toute votre configuration ODBC dans les emplacements de fichiers par défaut pour Mac OS X -

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

Vous pouvez créer des liens symboliques de nulle part ailleurs vous pouvez avoir ces fichiers, par exemple -

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

dernier, vous pouvez bénéficier de tests avec un pilote ODBC commercial pour MySQL, such as one of my employer's offerings (essai gratuit de deux semaines prévu dans le cadre du téléchargement).