Mfc 寻址到通过CDatabase::ExecuteSQL创建的临时表

Mfc 寻址到通过CDatabase::ExecuteSQL创建的临时表,mfc,odbc,informix,Mfc,Odbc,Informix,考虑以下代码并建议,为什么我不能处理在当前会话中创建的临时表 CDatabase cdb; CString csConnectionString = "Dsn=prm2;Driver={INFORMIX 3.34 32 BIT};Host=10.XXX.XXX.XXX;Server=SRVNAME;Service=turbo;Protocol=olsoctcp;Database=DBNAME;Uid=user;Pwd=password"; cdb.OpenEx(csConnectionStrin

考虑以下代码并建议,为什么我不能处理在当前会话中创建的临时表

CDatabase cdb;
CString csConnectionString = "Dsn=prm2;Driver={INFORMIX 3.34 32 BIT};Host=10.XXX.XXX.XXX;Server=SRVNAME;Service=turbo;Protocol=olsoctcp;Database=DBNAME;Uid=user;Pwd=password";
cdb.OpenEx(csConnectionString, CDatabase::noOdbcDialog);
cdb.ExecuteSQL(CString("Set Isolation to Dirty Read"));
...
CString csStatement1 = "SELECT serno FROM TABLE1 into temp ttt_1;"
CString csStatement2 = "DROP TABLE ttt_1";

cdb.ExecuteSQL(csStatement1); // point1
cdb.ExecuteSQL(csStatement2); // point2
...
cdb.Close();
在第一点,一切都很好。在第2点,我有:

指定的表(ttt_1)不在数据库中。状态:S0002,本机:-206,源:[Informix][Informix ODBC驱动程序][Informix]

我尝试将username指定为前缀(比如
user.ttt_1
“user.ttt_1
);我试图在csStatement1中的相应语句中创建永久表,但每次都在第2点失败。但当我两次尝试在csStatement1中创建同一个临时表时,我得到一条消息,即临时表已经存在于会话中

请告知:有什么问题,如何处理创建的临时表。

这一切都与此有关。默认情况下,ODBC使用在连接过程中定义的选项,并且根据Informix的默认设置是
commitretain=false

您有两个选项:通过连接字符串(
commitretain=true
)或通过ODBC设置(更好的选项)。对于要保留临时表的一组语句,请通过SqlSetConnectAttr激活手动提交模式,然后执行一些语句,然后调用SqlEndTran。请注意,在手动模式下,您不需要调用
begintransaction
,因为它将自动启动(行为类似于Oracle)

请注意,ODBC应用程序不应使用诸如BEGIN transaction、COMMIT transaction或ROLLBACK transaction之类的Transact-SQL事务语句,而应使用ODBC命令