【问题标题】:Adding custom SQLite3 function using wxSQLite3使用 wxSQLite3 添加自定义 SQLite3 函数
【发布时间】:2017-03-31 09:35:32
【问题描述】:

我正在使用 wxSQLite3(wxWidgets 的一部分)来访问 SQLite 数据库。一切正常,但现在我需要向 SQLite 添加一个 cutsom 函数。由于代码中的所有内容都是通过 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”。

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

【问题讨论】:

  • 请注意:wxSQLite3 是一个使用 wxWidgets 构建的组件,而不是 wxWidgets 的一部分

标签: sqlite wxwidgets


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 2015-06-27
    • 2010-10-31
    • 2012-01-25
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多