我需要一些如何使用Informix CSDK和OIC ++处理事务的建议。
conn
是一个开放的连接对象。选择作品查找。这里的数据库是使用日志记录设置的 - 正如我发现的那样,更新stmt本身什么都不做。
这是我试过的:
conn.SetTransaction( ITConnection::BEGIN );
qtext = "UPDATE transit_kunde_s SET erledigt='Y' WHERE transitkunde='"+ts+"'";
cout << qtext << endl;
code = query_up.ExecForStatus(qtext.c_str());
cout << "code " << code << endl;
conn.SetTransaction( ITConnection::COMMIT );
答案 0 :(得分:0)
好的,我再次回答自己......
现在可以对提取的行中的大对象执行操作,即使连接仍被检出(锁定)。在ITQuery :: ExecForIteration()方法返回结果集中的多行后,将检出连接。它将保持签出状态,直到结果集中的最后一行已使用ITQuery :: NextRow()获取,或者通过调用ITQuery :: Finish()终止了查询处理。检查连接时,不能在该连接上执行其他查询。
因为我在一个查询结果迭代的while循环中,我需要另一个更新查询新连接
// already have 2 connection objects: conn, conn2
ITQuery query(conn);
ITQuery query_up(conn2);
string qtext;
qtext = "SELECT * FROM transit_kunde_s WHERE erledigt='N' ORDER BY transitkunde";
okay = query.ExecForIteration(qtext.c_str());
while (row = query.NextRow()) {
// do stuff
// NOW WANT TO DO ANOTHER QUERY? --> NEED ANOTHER CONNECTION!!
ok_ta = conn2.SetTransaction( ITConnection::BEGIN);
qtext = "UPDATE transit_kunde_s SET erledigt='Y' WHERE transitkunde='"+ts+"'";
code = query_up.ExecForStatus(qtext.c_str());
ok_ta = conn2.SetTransaction( ITConnection::COMMIT );
}
// we see later the 1st query to be finished here
query.Finish();