Oracle and ODBC erlang driver

Yvan Godin <>
Wed Jun 4 11:46:03 CEST 2003


Le Mercredi 28 Mai 2003 18:25, vous avez écrit :

First of all .. thank for your answer

> The erlang ODBC application consists of an erlang part and a C-part.
> The C-part delivered for the W2K platform is compiled to work with
> sqlserver. Have you recompiled it to link with your oracle driver?
Really needed ??? seem to me ODBC here to be indépendant from database drivers 
;-)


> Please let me know how it goes.

I have made some new tests and below the result

With new erlang ODBC functions (odbc:connect(..))
and setting  LOG on ODBC visual studio analyser

I get a pop up with 
APPLICATION ERROR
l'instruction 0x1f95f26d emploi l'adresse memoire 0x1f95f26d
MEMORY CAN'T BE READ



Then I made some test with the deprecated fonctions
(modifed version of basic.erl in odbc example see code below)
and seem be better

here are the result (give me an answer ... the error msg may be due of bad  
code ...see below)


yoldbc:init().

sqlConnect returns 1
sqlExecDirect returns 0
Select: Number of columns: 6
sqlBindColumn returns 0
sqlBindColumn returns 0
sqlFetch returns 0
Select: Column 1 data:"11"
Select: Column 2 data:"CLIENT"

=ERROR REPORT==== 3-Jun-2003::17:36:44 ===
Error in process <0.72.0> with exit value: 
{{badmatch,0},[{yoldbc,select,0},{yol
dbc,init,0},{erl_eval,expr,3},{erl_eval,exprs,4},{shell,eval_loop,2}]}
** exited: {{badmatch,0},
            [{yoldbc,select,0},
             {yoldbc,init,0},
             {erl_eval,expr,3},
             {erl_eval,exprs,4},
             {shell,eval_loop,2}]} **

=ERROR REPORT==== 3-Jun-2003::17:36:44 ===
** Generic server odbc1 terminating
** Last message in was {'DOWN',#Ref<0.0.0.288>,
                               process,
                               <0.72.0>,
                               {{badmatch,0},
                                [{yoldbc,select,0},
                                 {yoldbc,init,0},
                                 {erl_eval,expr,3},
                                 {erl_eval,exprs,4},
                                 {shell,eval_loop,2}]}}
** When Server state == {state,#Port<0.85>,
                               undefined,
                               <0.72.0>,
                               undefined,
                               on,
                               undefined,
                               undefined,
                               undefined,
                               connected,
                               undefined,
                               0,
                               true,
                               true,
                               [{#Ref<0.0.0.303>,2},{#Ref<0.0.0.302>,1}]}
** Reason for termination ==
** {stopped,{'EXIT',<0.72.0>,
                    {{badmatch,0},
                     [{yoldbc,select,0},
                      {yoldbc,init,0},
                      {erl_eval,expr,3},
                      {erl_eval,exprs,4},
                      {shell,eval_loop,2}]}}}




**************MODIFIED VERSION of BASIC.ERL *************
-module(yoldbc).
-export([init/0,stop/0]).
-include("odbc.hrl").

-def.... here my connection macros

init() ->
    % Start a new ODBC server. The application must already be started.
    {ok, Pid} = odbc:start_link({local, ?SERV},[], []),
    % Connect to the database (also loads the Driver).
    Ret =  odbc:sqlConnect(?SERV, ?DSN, ?UID, ?PWD, infinity),
    io:format("sqlConnect returns ~p~n",[Ret]),
    select(),
    stop().

select() ->
    SelectStmt = "SELECT * FROM GROUPES",
    Ret1 = odbc:sqlExecDirect(?SERV, SelectStmt, infinity),
    io:format("sqlExecDirect returns ~p~n",[Ret1]),
    {?SQL_SUCCESS, NSelectedCols} =
      odbc:sqlNumResultCols(?SERV, infinity),
    io:format("Select: Number of columns: ~p~n", [NSelectedCols]),
    {ok,Ref1} = odbc:columnRef(),
    {ok,Ref2} = odbc:columnRef(),
    Ret6 = odbc:sqlBindColumn(?SERV, 1, Ref1, infinity),
    io:format("sqlBindColumn returns ~p~n",[Ret6]),
    Ret7 = odbc:sqlBindColumn(?SERV, 2, Ref2, infinity),
    io:format("sqlBindColumn returns ~p~n",[Ret7]),
    % Fetch the first row of selected rows.
    Ret8 = odbc:sqlFetch(?SERV, infinity),
    io:format("sqlFetch returns ~p~n",[Ret1]),
    {ok, ColValue1} =
	odbc:readData(?SERV, Ref1, infinity),
    io:format("Select: Column 1 data:~p~n",[ColValue1]),
    {ok, ColValue2} =
      odbc:readData(?SERV, Ref2, infinity),
    io:format("Select: Column 2 data:~p~n",[ColValue2]),
    ?SQL_NO_DATA = odbc:sqlFetch(?SERV, infinity),
    Ret12 = odbc:sqlCloseHandle(?SERV, infinity),
    io:format("sqlCloseHandle returns ~p~n",[Ret12]).
stop() ->
    Ret = odbc:sqlDisConnect(?SERV, infinity),
    odbc:stop(?SERV).



-- 
Cordialement

Yvan GODIN
WITBE/DSIC

http://www.witbe.net




More information about the erlang-questions mailing list