我正在使用wxSQLite3(wxWidgets的一部分)来访问SQLite数据库。一切正常,但现在我需要为SQLite添加一个cutom函数。由于代码中的所有内容都是通过wxSQLite3完成的,所以我想使用wxSQLite3接口来添加函数,而不是普通的C SQLite API。 在文档之后,我已经声明了一个继承wxSQLite3ScalarFunction的类:
class checkDateFun : public wxSQLite3ScalarFunction {
public:
void Execute(wxSQLite3FunctionContext& ctx);
};
并覆盖纯虚拟wxSQLite3ScalarFunction :: Execute()方法,如下所示
void checkDateFun::Execute(wxSQLite3FunctionContext& ctx)
{
wxString date1 = ctx.GetString(0);
wxString date2 = ctx.GetString(1);
//some checks on dates
ctx.SetResult(1);
return;
}
然后,在数据库创建期间,我注册了正在执行的功能
checkDateFun fun;
bool regOk = m_db->CreateFunction("CheckDate", 2, fun);
但是当我稍后尝试进行使用该函数的查询时,我收到此错误: “抛出异常:读取访问冲突.func->为0xFFFFFFFFFFFF7”。
我做错了什么? 谢谢你的帮助和时间。
答案 0 :(得分:0)
我明白了!
我必须将checkDateFun fun
声明为创建数据库的类的成员,然后将该成员传递给CreateFunction
。
实际上,我在创建数据库的函数中实例化了我的checkDateFun
,但是在退出该函数时将调用checkDateFun
析构函数,并且进一步的SQL查询将指向无处。
希望这可以帮助某人,虽然我犯了一个非常愚蠢的错误; - )