最近接触要在应用中嵌入odbc,一切准备就绪,tsql跟isql命令都能正常使用,但是一进入到Erlang程序,调用如下语句时odbc:connect("DSN=test;UID=sa;PWD=",[]),就会报错,
{error,port_program_executable_not_found}。找了很多资料都没有相关的解释,求大侠帮忙
大侠哪里去了<imgsrc="http://www.oschina.net/js/ke/plugins/emoticons/images/5.gif"alt="">是不是你在erlang没有初始化(或者说没有open、没有active)ODBC的驱动?有,在Erlang初始化是application:start(odbc)或者odbc:start()吧,但是一链接就会报错windows的东西一般是先init,再start。不用,直接启动就行了
这类的东西直接看源码就行了啊。odbc.erl中的
<preclass="brush:html;toolbar:true;auto-links:false;">%%-------------------------------------------------------------------------%%init(Args)->{ok,State}|{ok,State,Timeout}|{stop,Reason}%%Description:Initiatestheerlangprocessthatmanagestheconnection%% andstartstheport-programthatusetheodbcdriver%%tocommunicatewiththedatabase.%%-------------------------------------------------------------------------init(Args)-> process_flag(trap_exit,true), {value,{client,ClientPid}}=lists:keysearch(client,1,Args), erlang:monitor(process,ClientPid), Inet=casegen_tcp:listen(0,[inet6])of {ok,Dummyport}-> gen_tcp:close(Dummyport), inet6; _-> inet end, {ok,ListenSocketSup}=gen_tcp:listen(0,[Inet,binary,{packet,?LENGTH_INDICATOR_SIZE}, {active,false},{nodelay,true}]), {ok,ListenSocketOdbc}=gen_tcp:listen(0,[Inet,binary,{packet,?LENGTH_INDICATOR_SIZE}, {active,false},{nodelay,true}]), %%Starttheportprogram(acprogram)thatutilizestheodbcdriver caseos:find_executable(?SERVERPROG,?SERVERDIR)ofFileNamewhenis_list(FileName)-> Port =open_port({spawn,FileName}, [{packet,?LENGTH_INDICATOR_SIZE},binary, exit_status]), State=#state{listen_sockets= [ListenSocketSup,ListenSocketOdbc], erlang_port=Port,owner=ClientPid}, {ok,State};false-> {stop,port_program_executable_not_found} end.odbc下没有priv文件夹,这是没装的节奏,请问下要这个驱动是单独装的吗,battyman,谢谢了
isql和tsql命令都能连上数据库的,这是怎么回事啊,求大腿<imgsrc="http://www.oschina.net/js/ke/plugins/emoticons/images/6.gif"alt="">
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。