2017-08-01 14 views
0

SLES 12マシンにunixODBC-2.3.1-4.95.x86_64をインストールし、アプリケーションを作成しました。しかし、私はUnixODBCを使ってPosgreSQLでエラー処理の問題に直面しました。私はてSQLGetDiagFieldにdiagIdの異なるバリアントを使用しようとしているPostgreSQLネイティブエラーコードの取得

void checkDiag (SQLSMALLINT handleType, SQLHANDLE handle) 

{ 

     SQLRETURN rc = SQL_ERROR; 
     SQLCHAR sqlState[6]; 
     SQLINTEGER nError; 
     SQLSMALLINT recnum = 0; 
     SQLCHAR eMsg[SQL_MAX_MESSAGE_LENGTH]; 
     SQLCHAR nativeError[SQL_MAX_MESSAGE_LENGTH]; 
     while (rc != SQL_NO_DATA_FOUND) 
     { 
       rc = SQLGetDiagRec (handleType, 
            handle, 
            recnum, 
            sqlState, 
            &nError, 
            eMsg, 
            255, 
            NULL); 
       if (rc != SQL_NO_DATA_FOUND) 
       { 
         SQLGetDiagField(handleType, 
             handle, 
             recnum, 
             SQL_DIAG_NATIVE, 
             nativeError, 
             255, 
             NULL); 
         printf("RECNUM %d\n sqlState = %s\n nError = %d\n Error Message %s\n nativeError %s \n", 
           recnum, sqlState, nError, (char *) eMsg, (char *)nativeError); 
       } 
       recnum++; 
     } 
} 

SQL_DIAG_MESSAGE_TEXTSQL_DIAG_NATIVESQL_DIAG_SQLSTATE

は、これを行うために、私は次の関数を作成しました。 PostgreSQLのエラーIDはすべて取得しましたが、 私はPostgresqlエラーコードID = -1を取得し続けています。

だから私の質問は次のとおりです。

それはunixODBCのAPIを使用して、ネイティブのPostgreSQLのエラーコードIDを取得することはできますか? 私が間違っていることを教えてください。

答えて

0

解決策が見つかりました。私はPostgreSQLのネイティブエラーコードを取得することができた設定ファイルでDriverエントリの記述を変更した後

[PostgreSQL] 
Description=PostgreSQL ODBC driver 
Driver=/usr/lib64/unixODBC/libodbcpsql.so 
FileUsage=1 

設定ファイルのODBCINST.INIの内容は以下の通りでした。ライブラリpsqlodbcw.so

[PostgreSQL] 
Description=PostgreSQL ODBC driver 
Driver=/opt/PostgreSQL/psqlODBC/lib/psqlodbcw.so 
FileUsage=1 

https://www.postgresql.org/download/linux/suse/ここからダウンロードすることができますEnterpriseDBのPostgreSQLで供給されています。

これらの変更後、私はネイティブエラーコードを得ることができます。上記のコードを使用すると、postgresのエラーコード値はsqlstateに書き込まれます。

関連する問題