OTLv4 を使用してデータベースに接続する C++ プログラムがあります。すべてが正常に機能しています。データベースにデータを挿入することも、データベースからデータを読み取ることもできます。
ただし、別のプログラムからデータベースのデータを変更しても、C++ プログラムには反映されません。たとえば、MySQL ワークベンチでエントリを削除しても、C++ プログラムには引き続きエントリが表示されます。表示されるデータは、プログラムが最初にデータベースにログインしたときに表示されたデータです。
クエリを実行するたびにログオフしてログオンすると、現在の値が取得されますが、あまり効率的ではないようです。同様に、データベースを変更する C++ プログラムからクエリを実行すると、プログラムはその時点までの現在の値を確認し始めます。
私には、これはある種の過度に攻撃的なキャッシングのように感じますが、それが OTL でどのように機能するかはわかりません。おそらく私が何も知らないストリーム プーリング以外のキャッシュについての言及は見たことがありません。
派手なことはしていません。OTL は次のパラメータでコンパイルされます。
#define OTL_ODBC // Compile OTL 4.0/ODBC
#define OTL_UNICODE // Compile OTL with Unicode
#define OTL_UNICODE_EXCEPTION_AND_RLOGON
#define OTL_UNICODE_STRING_TYPE std::wstring
// The following #define is required with MyODBC 3.51.11 and higher
#define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE
コードは次のようになります。
otl_connect::otl_initialize(1); // Multithreading
otl_connect database;
database.rlogon(...);
// Make queries with otl_stream and direct_exec
otl_stream stream(50, "select * from ...", database);
database.direct_exec("insert ... into ...", otl_exception::disabled);
database.logoff();
見逃したもの、必要な設定はありますか? ある種のキャッシュをオフにしますか? たぶん、毎回ログインしてログオフする必要がありますか?