0

私はunixodbcodbc.ini設定ファイルを次のように持っています:

[test]
Driver = /usr/local/lib/libmyodbc5-5.1.8.so
Description = Connector/ODBC 5.1.8 Driver DSN
SERVER = 127.0.0.1
PORT = 3306
USER = root
Password =
DATABASE = test
OPTION =
SOCKET =

そして問題は、上記で指定された「test」であるデータベースを使用しないことです。

私がしなければならないことは、データベースに変更してクエリを実行するために直接SQLを手動で実行することです。

SQLExecDirect(stmt, "USE test", SQL_NTS);
SQLExecDirect(stmt, "SELECT * FROM mytable", SQL_NTS);

mysqlコマンドである「USEtest」をどのように取り除くべきかについてのアイデア。unixodbcが'test'をデフォルトのデータベースとして設定していないのはなぜですか?それはすでにconfファイルで指定されているのですか?

4

2 に答える 2

1

Windows と同様に、ドライバー マネージャー (この場合は unixODBC) は Driver タグでのみ機能し、DSN 内の他のすべてのエントリは、解釈するドライバー次第です。database= エントリがあることに気付かず、魔法のように、このドライバーで "USE" コマンドを実行し、別の呼び出しで SQLSetConnectAttr( SQL_ATTR_CURRENT_CATALOG ) を実行する必要があることを認識します。

私の MySQL ドライバーのコピーでは、確かに database= エントリを使用しています。ただし、1.使用しているドライバーのコピーが、unixODBC lib を使用して共有構成ファイル (libodbcinst.so) にアクセスするようにビルドされているか、ドライバーがそれを直接読み取り、同じ ini ファイルを読み取っていることを確認します。 unixODBC として。ドライバーがロードされた後にどの ini が開かれているかを strace で確認してください。おそらく ODBCINI=/path/to/your/odbc.ini を設定してみてください

于 2011-06-16T08:25:01.563 に答える