在QSqlTableModel中通过setRecord更新行

时间:2016-11-04 19:07:43

标签: c++ qt sqlite qt5 qsqltablemodel

我使用Qt 5.7,C ++,SQLite数据库。我有Sub Export() rowsLength =document.all.yourHTMLTableId.rows.length cellLength= (document.all.yourHTMLTableId.Cells.length/rowsLength) 'Because i dont know how to get no.of cells in a row,so used a simple division Set crr = CreateObject("WScript.Shell") fileNm= "Export" dir= crr.CurrentDirectory&"\"&fileNm&".xlsx" Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Add() Set objWorksheet= objWorkbook.Worksheets(1) i=0 j=0 do until i=rowsLength do until j=cellLength objWorksheet.cells(i+1,j+1).value = document.all.yourHTMLTableId.rows(i).cells(j).innerHTML msgbox document.all.yourHTMLTableId.rows(i).cells(j).innerHTML j= j+1 Loop j=0 i=i+1 Loop objWorkbook.SaveAs(dir) objWorkbook.close objExcel.Quit Set objExcel = Nothing 后裔班。我通过QSqlTableModelsetRecord()调用(submitAll()模式)更新行。我们在一行中将QSqlTableModel::OnManualSubmit设置为value_1。它在数据库中正确保存,相应的field_1也会自动刷新。当我再次在任意行中将QTableView设置为value_2时,修改会显示在视图中,但它不会保存在数据库中。 见qsqltablemodel.cpp source for Qt 5.7.0

field_1

它包含以下片段:

bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement,
                                 const QSqlRecord &rec, const QSqlRecord &whereValues)

在我的情况下,对于第二次和进一步的更新调用,以下条件为真:if (editQuery.lastQuery() != stmt) { if (!editQuery.prepare(stmt)) { error = editQuery.lastError(); return false; } }

stmt可以包含类似

的值

editQuery.lastQuery() == stmt

因此,UPDATE documents SET "mark"=? WHERE "documents"."id" = ? AND "documents"."checked" = ? AND "documents"."state" = ?未被调用。这就是分配后的原因

bool QSQLiteResult::prepare(const QString &query)

这种情况属实:int paramCount = sqlite3_bind_parameter_count(d->stmt);see qsql_sqlite.cpp:429paramCount == 0是指向d->stmt的指针,它是NULL。

导致最终错误"参数计数不匹配"。这是一个错误,什么是解决方法?请不要建议原始SQL,我不想经常重置模型。

0 个答案:

没有答案