<FONT face="Default Sans Serif,Verdana,Arial,Helvetica,sans-serif" size=2><div><div><font color="#990099">-----unixodbc-support-bounces@mailman.unixodbc.org wrote: -----<br><br></font>&gt;To: Support for the unixODBC project<br>&gt;&lt;unixodbc-support@mailman.unixodbc.org&gt;<br>&gt;From:&nbsp;Nick&nbsp;Gorham&nbsp;&lt;nick@lurcher.org&gt;<br>&gt;Sent&nbsp;by:&nbsp;unixodbc-support-bounces@mailman.unixodbc.org<br>&gt;Date:&nbsp;01/14/2009&nbsp;10:34AM<br>&gt;Subject:&nbsp;Re:&nbsp;[unixODBC-support]&nbsp;Checking&nbsp;connection&nbsp;status&nbsp;with&nbsp;ODBC<br>&gt;<br>&gt;Alan&nbsp;J&nbsp;Batsford&nbsp;wrote:<br>&gt;<br>&gt;&gt;unixodbc-support-bounces@mailman.unixodbc.org wrote on 01/13/2009<br>&gt;12:13:21<br>&gt;&gt;PM:<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;<br>&gt;&gt;<br>&gt;&gt;&gt;Alan&nbsp;J&nbsp;Batsford&nbsp;wrote:<br>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;I'm using unixODBC 2.2.14 on CentOS 4.6. Right now I'm using ODBC<br>&gt;to<br>&gt;&gt;&gt;&gt;connect&nbsp;to&nbsp;postgreSQL&nbsp;8.2.5&nbsp;within&nbsp;a&nbsp;C/C++&nbsp;program,&nbsp;but&nbsp;the&nbsp;DSN&nbsp;is<br>&gt;&gt;&gt;&gt;going&nbsp;to&nbsp;change&nbsp;to&nbsp;Oracle&nbsp;soon.&nbsp;I&nbsp;can&nbsp;make&nbsp;a&nbsp;connection&nbsp;and&nbsp;run<br>&gt;&gt;&gt;&gt;queries.&nbsp;What's&nbsp;the&nbsp;best&nbsp;way&nbsp;to&nbsp;generically&nbsp;check&nbsp;the&nbsp;connection<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;status?<br>&gt;&gt;&nbsp;&nbsp;<br>&gt;&gt;<br>&gt;&gt;&gt;&gt;Thanks&nbsp;for&nbsp;all&nbsp;your&nbsp;advise.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;You could try using SQLGetConnectAttr with<br>&gt;SQL_ATTR_CONNECTION_DEAD.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;--<br>&gt;&gt;&gt;Peter<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>&gt;&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;Thanks,&nbsp;I&nbsp;tried&nbsp;the&nbsp;function&nbsp;out&nbsp;but&nbsp;I&nbsp;can't&nbsp;quite&nbsp;get&nbsp;it&nbsp;to&nbsp;work.<br>&gt;&gt;<br>&gt;&gt;SQLGetConnectAttr is returning -1 both when the connection is down<br>&gt;and&nbsp;up.<br>&gt;&gt;When&nbsp;it's&nbsp;down&nbsp;I&nbsp;call&nbsp;SQLGetDiagRec&nbsp;and&nbsp;recieve&nbsp;a&nbsp;message&nbsp;about&nbsp;the<br>&gt;&gt;connection being down. But when the connection is up and I try to<br>&gt;get&nbsp;the<br>&gt;&gt;diagnostic message I get an unreadable message. For example my last<br>&gt;test<br>&gt;&gt;was:<br>&gt;&gt;"[nxDC[rvrMngrlvldatiueoto&nbsp;dniir"<br>&gt;&gt;with&nbsp;NativeError&nbsp;set&nbsp;to&nbsp;0.<br>&gt;&gt;<br>&gt;&gt;My&nbsp;call&nbsp;to&nbsp;SQLGetConnectionAttr:<br>&gt;&gt;char&nbsp;ODBC_str_err[20];&nbsp;//&nbsp;Not&nbsp;sure&nbsp;how&nbsp;long&nbsp;this&nbsp;needed&nbsp;to&nbsp;be.<br>&gt;&gt;SQLINTEGER&nbsp;StringLength;<br>&gt;&gt;<br>&gt;&gt;...<br>&gt;&gt;<br>&gt;&gt;ODBC_erg = SQLGetConnectAttr(ODBC_Connection,<br>&gt;SQL_ATTR_CONNECTION_DEAD,<br>&gt;&gt;(SQLPOINTER)ODBC_str_err,&nbsp;sizeof&nbsp;(ODBC_str_err),&nbsp;&amp;StringLength);<br>&gt;&gt;if ((ODBC_erg == SQL_SUCCESS) || (ODBC_erg ==<br>&gt;SQL_SUCCESS_WITH_INFO))<br>&gt;&gt;{<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;<br>&gt;&gt;}<br>&gt;&gt;else<br>&gt;&gt;{<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_odbc_error(ODBC_Connection);<br>&gt;&gt;}<br>&gt;&gt;<br>&gt;&gt;My&nbsp;code&nbsp;for&nbsp;checking&nbsp;the&nbsp;connection:<br>&gt;&gt;void&nbsp;print_odbc_error(SQLHDBC&nbsp;ODBC_Connection)<br>&gt;&gt;{<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;SQLINTEGER&nbsp;ODBC_err&nbsp;=&nbsp;0;<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;SQLSMALLINT&nbsp;ODBC_mlen&nbsp;=&nbsp;0;<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;ODBC_stat[10];<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;ODBC_msg[200];<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;memset&nbsp;(ODBC_stat,&nbsp;0,&nbsp;sizeof&nbsp;(ODBC_stat));<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;memset&nbsp;(ODBC_msg,&nbsp;0,&nbsp;sizeof&nbsp;(ODBC_msg));<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ODBC_Connection==&nbsp;0)<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&gt;&gt;        fprintf("print_odbc_error failed due to ODBC Connection<br>&gt;Handle&nbsp;==<br>&gt;&gt;0.\n");<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;&gt;<br>&gt;&gt;    SQLGetDiagRec(SQL_HANDLE_DBC, ODBC_Connection, 1, ODBC_stat,<br>&gt;&amp;ODBC_err,<br>&gt;&gt;ODBC_msg,&nbsp;sizeof(ODBC_msg),&nbsp;&amp;ODBC_mlen);<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;fprintf("%s&nbsp;(%d)\n",&nbsp;ODBC_msg,&nbsp;ODBC_err);<br>&gt;&gt;}<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;Perhaps I'm using arguments wrong? Or the postgres ODBC driver<br>&gt;doesnt<br>&gt;&gt;support&nbsp;it?<br>&gt;&gt;<br>&gt;&gt;-Alan<br>&gt;&gt;&nbsp;&nbsp;<br>&gt;&gt;<br>&gt;It may not support it, but the error looks as if your app and the<br>&gt;driver&nbsp;<br>&gt;manager are having a conflict involving unicode. Or it may be the<br>&gt;driver&nbsp;<br>&gt;manager and the driver, I nkow the postgres driver can be built using<br>&gt;4&nbsp;<br>&gt;or 2 byte unicode, you need 2 bute for use with unixODBC, and that<br>&gt;error&nbsp;<br>&gt;looks as if it might be using 4. Something is wrong anyway. What doe<br>&gt;the&nbsp;<br>&gt;ODBC&nbsp;trace&nbsp;show&nbsp;if&nbsp;its&nbsp;enabled?<br>&gt;<br>&gt;--&nbsp;<br>&gt;Nick<br><br>I tried enabling it to answer your question, but nothing writes to the log file I point to. odbc.ini is:<br>[ODBC_Host]<br>Description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = Host database<br>Driver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = PostgreSQL<br>Trace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = Yes<br>TraceFile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /home/alan/trace_odbc.log<br>Database&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = testdb<br>Servername&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = localhost<br>Username&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = alan<br>Password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br>Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 5432<br>Protocol&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 6.4<br>ReadOnly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = No<br>RowVersioning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = No<br>ShowSystemTables&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = No<br>ShowOidColumn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = No<br>FakeOidIndex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = No<br>ConnSettings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br><br>odbcinst.ini:<br>[PostgreSQL]<br>Description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = Postgres ODBC driver<br>Driver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /usr/lib/libodbcpsql.so (2.0.0, came with unixODBC)<br>Driver64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /usr/lib<br>Setup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /usr/lib/libodbcpsqlS.so (1.0.0, came with unixODBC)<br>Setup64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /usr/lib<br>UsageCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1<br>CPTimeout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br>CPTimeToLive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br>DisableGetFunctions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br>DontDLCLose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1<br>ExFetchMapping&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1<br>Threading&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3<br>FakeUnicode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br>IconvEncoding&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br>Trace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br>TraceFile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br>TraceLibrary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br><br><br>Is this what you meant by doing a trace?<br><br>-Alan<br></div></div></FONT>