使用wxSQLite3添加自定义SQLite3函数

时间:2017-03-31 09:35:32

标签: sqlite wxwidgets

我正在使用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”。

我做错了什么? 谢谢你的帮助和时间。

1 个答案:

答案 0 :(得分:0)

我明白了! 我必须将checkDateFun fun声明为创建数据库的类的成员,然后将该成员传递给CreateFunction。 实际上,我在创建数据库的函数中实例化了我的checkDateFun,但是在退出该函数时将调用checkDateFun析构函数,并且进一步的SQL查询将指向无处。 希望这可以帮助某人,虽然我犯了一个非常愚蠢的错误; - )