Qt中update有关问题

Qt中update问题
bool FitSingleReportDatabase::updateReport(QString xmlId,JS_ReportData&jsData ,FullReportData&strData)
{
    Q_D(FitSingleReportDatabase);
bool bRet = false;

if (!d->openDatabase()) 
return bRet;
QSqlQuery query(d->SingleDatabase);
query.prepare("UPDATE single_report SET"
"patient_id=?, patient_ids=?,patient_name=?,"
"bed_no=?, modality=?, approval_status=?, check_start_time=? ,check_end_time=? ,created_at=?,updated_at=?,"
"apply_department_name=?, apply_doctor_name= ?, consulting_room_name=?, examined_part_name=?,"
"examined_item_name=?, examine_doctor_name=?, created_by_name=?, controller_by_name=? ,"
"technician_name=?, report_document_id=?, appointment_time=?"
"WHERE id=?");
query.addBindValue(jsData.patient_id);
query.addBindValue(jsData.patient_ids);
query.addBindValue(jsData.patient_name);
query.addBindValue(strData.BedNum.toInt());
query.addBindValue("US");
query.addBindValue(0);
query.addBindValue(QDateTime::fromString(jsData.check_start_time,"yyyy-MM-ddThh:mm:ss"));
query.addBindValue(QDateTime::currentDateTime());
query.addBindValue(QDateTime::currentDateTime());
query.addBindValue(QDateTime::currentDateTime());
query.addBindValue( strData.ApplyDepartmentName);
query.addBindValue(strData.ApplyDoct);
query.addBindValue(strData.EquipmentName);
query.addBindValue(strData.CheckPart);
query.addBindValue(strData.CheckItem);
query.addBindValue(strData.CheckDoct);
query.addBindValue(strData.InputDoct);
query.addBindValue(QString(""));
query.addBindValue(strData.Technician);
query.addBindValue(xmlId);
query.addBindValue(QDateTime::fromString(jsData.check_start_time,"yyyy-MM-ddThh:mm:ss"));
       query.addBindValue(jsData.report_id);
bool bSuccess = query.exec();
if(!bSuccess)
{
QSqlError lastError = query.lastError();
qDebug() << lastError.driverText()<<QString(QObject::tr("Update Failed!"));
}

bRet = bSuccess;
this->databaseCommit();
return bRet;
}
这是代码,编译通过,就是我调用这个函数运行完了以后数据库中的数据一点变化都没有,不知道是什么原因,返回值也是false,这里面条件是jsData.report_id是不变的。
------解决思路----------------------
用lastError.text()看报什么错误,估计是不是SQL占位符没有对应好addBindValue。
------解决思路----------------------
费我老大眼神给你算了一下,22个问号只有21个addBindValue
------解决思路----------------------
prepare(...)和bind的个数是否一致。
------解决思路----------------------
你先用QString(....).arg形式将你的sql用这种方法表示出来,调试的时候可以得到一个sql语句,然后用这个sql语句直接到数据库查询下,看看报什么错。