2013-04-09 110 views
1

我试图连接到使用SWI Prolog的(与ODBC驱动程序)的本地MySQL数据库和我收到以下错误SWI Prolog的ODBC错误

?- [family]. 
% family compiled 0.00 sec, 264 bytes 
true. 

?- open_db. 
ERROR: ODBC: State S1090: [unixODBC][Driver Manager]Invalid string or buffer length 

数据库名称:prolog_test

序言代码(family.pl)

open_db :- 
    odbc_connect('mysql:dbname=prolog_test;host=localhost', _, 
       [ user('prologuser'), 
        password('prologpass'), 
        alias(localhost), 
        open(once) 
       ]). 

children(X) :- 
    odbc_query(localhost, 'SELECT (lemma) FROM tableName',X). 

感谢您的帮助

+0

在从@CapelliC(下面)实现函数后,我能够发现ODBC在我的服务器上没有正确设置。在[Ubuntu Post](https://help.ubuntu.com/community/ODBC)和[此帖子]之后(http://www.1stbyte.com/2012/09/07/unixodbc-on-ubuntu-12 -04-broken-and-unable-to-connect-error /)我可以在我的服务器上建立一个ODBC连接。 – otternq 2013-04-10 01:23:24

回答

1

按照herehere的说明操作。

创建文件:/etc/odbc.ini

[ODBC Data Sources] 
odbcname  = MyODBC 3.51 Driver DSN 

[prologtest] 
Driver  = /usr/lib/odbc/libmyodbc.so 
Description = MyODBC 3.51 Driver DSN 
SERVER  = my.database.server.com 
PORT   = 
USER   = USER 
Password  = XXXXXX 
Database  = DBNAME 
OPTION  = 3 
SOCKET  = 

[Default] 
Driver  = /usr/local/lib/libmyodbc3.so 
Description = MyODBC 3.51 Driver DSN 
SERVER  = localhost 
PORT   = 
USER   = root 
Password  = 
Database  = test 
OPTION  = 3 
SOCKET  = 

在我的机器,libmyodbc.so位于/usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so

改变了Prolog的代码(更接近documentation

1 open_wordnet :- 
    2   odbc_connect('prologtest', _, 
    3      [ user('prologuser'), 
    4      password('prologpass'), 
    5      alias(prologa), 
    6      open(once) 
    7      ]). 

现在我能够使数据库查询

1

我用弱呃替代odbc_driver_connect,它的工作很好:

myodbc_connect_db(Db, Uid, Pwd, Cn) :- 
    format(atom(S), 'driver=mysql;db=~w;uid=~w;pwd=~w', [Db, Uid, Pwd]), 
    odbc_driver_connect(S, Cn, [encoding(utf8)]). 

根据不同的应用需求,可能是不需要DSN的优势。

+0

感谢您的帮助,实现您所描述的功能允许我找到错误:“错误:ODBC:状态IM002:[unixODBC] [驱动程序管理器]未找到数据源名称,并没有指定默认驱动程序”,这导致我到解。 – otternq 2013-04-10 01:27:42

+0

如果在/etc/odbcinst.ini文件中配置mysql驱动程序,那也没关系。例如,请参阅http://www.kaffeetalk.de/how-to-setup-and-configure-mysql-with-unixodbc-under-ubuntu-14-04/。 – Koryonik 2015-01-20 16:03:55