Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OTL没有看到外部数据库的更改 我有一个C++程序,它使用OTLV4连接到数据库。一切正常。我既可以将数据插入数据库,也可以从数据库中读取数据 但是,如果我从另一个程序中更改数据库中的数据,那么这在我的C++程序中没有反映出来。例如,如果我用MySQL Workbench删除条目,C++程序仍然会看到条目。我看到的数据是程序首次登录数据库时显示的数据_C++_Windows_Odbc_Otl - Fatal编程技术网

C++ OTL没有看到外部数据库的更改 我有一个C++程序,它使用OTLV4连接到数据库。一切正常。我既可以将数据插入数据库,也可以从数据库中读取数据 但是,如果我从另一个程序中更改数据库中的数据,那么这在我的C++程序中没有反映出来。例如,如果我用MySQL Workbench删除条目,C++程序仍然会看到条目。我看到的数据是程序首次登录数据库时显示的数据

C++ OTL没有看到外部数据库的更改 我有一个C++程序,它使用OTLV4连接到数据库。一切正常。我既可以将数据插入数据库,也可以从数据库中读取数据 但是,如果我从另一个程序中更改数据库中的数据,那么这在我的C++程序中没有反映出来。例如,如果我用MySQL Workbench删除条目,C++程序仍然会看到条目。我看到的数据是程序首次登录数据库时显示的数据,c++,windows,odbc,otl,C++,Windows,Odbc,Otl,如果每次执行查询时都注销并登录,则会得到当前值,但这似乎不是很有效。类似地,如果我从C++程序中运行一个查询来修改数据库,那么程序将开始看到当前值直到那个点。 对我来说,这感觉像是某种过度激进的缓存,但我不知道它在OTL中是如何工作的,除了可能的流池之外,我没有看到任何关于缓存的提及,而我对此一无所知 我没有做任何花哨的事。OTL使用以下参数编译: #define OTL_ODBC // Compile OTL 4.0/ODBC #define OTL_UNICODE // Compile OT

如果每次执行查询时都注销并登录,则会得到当前值,但这似乎不是很有效。类似地,如果我从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();

有什么我错过了,我需要做的配置吗?关闭某种缓存?也许我真的需要每次登录和注销?

我发现了问题:

OTL:当我在MySQL的表中插入新行时,我无法选择它,这是怎么回事

如果在otl_流中使用准备好的SELECT语句,并继续执行/重用该语句以获取新行,则每次提取序列用完后,都需要提交调用otl_connect::commit。commit调用将让您的MySQL服务器知道您当前的只读事务已完成,服务器可以启动一个新事务,这将使新插入的行对SELECT语句可见。换句话说,您需要提交SELECT语句才能看到新行


所以问题是,每当我做SELECT语句时,我都必须调用otl_connect::commit;或者MySQL无法理解该语句是否已完成。

OTL常见问题解答对Oracle OTL_订户是否收到有关数据库更改的通知提出了疑问。你用它来检测外部变化吗?好主意,但这是一个MySQL数据库,我不认为Oracle的功能适用。只是想让你知道,这个问题对我帮助很大:thx