我目前正在开发一种在我已经拥有的程序中创建编辑窗口的方法,该程序访问一个 Sqlite 数据库,该数据库设置并包含 4 个信息,条目的 ID,条目的名称(这是用户指定)、文件位置(也是用户输入的)和组成员。在编辑窗口中,有两个标签,一个用于名称的文本输入框和一个用于打开文件浏览器的按钮。我的问题是当我在添加新窗口中设置sql数据库时,所有数据都设置在数据库中,虽然当我想从数据库中编辑数据时,我目前删除旧数据然后添加新数据,虽然查看在线文档我发现了一个 UPDATE 方法,虽然这会更好,但无法以某种方式为数据库获取正确的索引,我如何调用索引 3,我得到一个错误
Unhandled exception at 0x01143622 in bv.exe: 0xC0000005: Access violation reading location 0x00000000.
经过一番研究,我发现这是由 NULL 引用指针引起的,我能找到的唯一原因是该字段为空,但我清楚地在添加窗口中设置了它。请帮忙 :(
std::string campaign_sql("SELECT id, name, config, members FROM bv_campaigns");
sqlite3_stmt *prepped_statement;
sqlite3_prepare(mainApp->GetAppData().db_conn, campaign_sql.c_str(), campaign_sql.length(), &prepped_statement, NULL);
//std::string name((const char *)sqlite3_column_text(prepped_statement, 1));
while ( SQLITE_ROW == sqlite3_step(prepped_statement) )
{
std::string name((const char *)sqlite3_column_text(prepped_statement, 1));
wxMessageBox(name);
std::string config((const char *)sqlite3_column_text(prepped_statement, 3));
wxMessageBox(config);
返回 NULL 引用错误
std::string name = pds.getCampaignName();
std::string config = pds.serialize();
std::string update_sql("INSERT INTO bv_campaigns (name, type, config) VALUES(?,'campaignCallListDataSourcePython',?)");
sqlite3_stmt *prepped_statement;
sqlite3_prepare(this->GetAppData().db_conn, update_sql.c_str(), update_sql.length(), &prepped_statement, NULL);
sqlite3_bind_text(prepped_statement, 1, name.c_str(), name.length(), NULL);
sqlite3_bind_text(prepped_statement, 3, config.c_str(), config.length(), NULL);
添加数据的地方,序列化和获取活动名称函数从添加窗口获取值,
我认为这就是所需要的一切。如果我缺少任何东西,请询问。谢谢