使用IBPP

时间:2018-03-12 13:05:49

标签: c++ firebird

使用IBPP写一个firebird数据库时遇到了一些问题。我可以使用SELECT语句从表中进行查询而没有问题,但每当我尝试使用IBPP :: Set或IBPP :: Execute写入值时,我都会收到错误。

这就是我连接数据库的方式:

db = IBPP::DatabaseFactory(settings.ServerName, settings.DbName, settings.UserName, settings.Password,
    "WIN1252", "PAGE_SIZE 8192 DEFAULT CHARACTER SET WIN1252");
db->Connect();
IBPP::Transaction tr = IBPP::TransactionFactory(db);
IBPP::Statement st = IBPP::StatementFactory(db, tr);

然后我想设置一个特定值:

st->Execute("UPDATE T_GEOMODELL SET Distance= 42.0 WHERE (OBJEKT_ID = 1756056);");

我也试过

st->Prepare("SELECT * FROM T_GEOMODELL WHERE OBJEKT_ID = 1756056");
st->Set(6, "41");
st->Execute();

我在这里得到“this-> mOutRow”为“nullptr”的错误。

然而,使用Firebird ISQL工具,相同的命令

UPDATE T_GEOMODELL SET Distance= 42.0 WHERE (OBJEKT_ID = 1756056);

没有问题。

我在x64下使用Visual C ++ 2015。 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

好的,我发现了错误 - 我必须使用tr-> Start()启动并提交事务;和tr-> Commit();

tr->Start();
st->Execute("UPDATE T_GEOMODELL SET Distance= 42.0 WHERE (OBJEKT_ID = 1756056);");
tr->Commit();