bool ReportWindow::saveToDb() { // do what we need to do DBFileDialog rptDiag; rptDiag.setCaption(tr("Save Report to Database")); if(!dbRecordName.isEmpty()) { rptDiag._name->setText(dbRecordName); } else { rptDiag._name->setText(reportName()); } rptDiag._grade->setValue(dbRecordGrade); if(rptDiag.exec() == QDialog::Accepted) { QString name = rptDiag.getName(); QString desc = reportDescription(); QString src = document().toString(); int grade = rptDiag.getGrade(); XSqlQuery q; XSqlQuery qry; q.prepare("SELECT report_id " " FROM report " " WHERE ((report_name=:report_name) " " AND (report_grade=:report_grade)); "); q.bindValue(":report_name", name); q.bindValue(":report_grade", grade); q.exec(); if(q.first()) { // update old record qry.prepare("UPDATE report " " SET report_source=:report_source, " " report_descrip=:report_descrip " " WHERE (report_id=:report_id);"); qry.bindValue(":report_source", src); qry.bindValue(":report_descrip", desc); qry.bindValue(":report_id", q.value("report_id").toInt()); } else { // insert new record qry.prepare("INSERT INTO report " " (report_name, report_source, report_descrip, report_grade) " "VALUES (:report_name, :report_source, :report_descrip, :report_grade);"); qry.bindValue(":report_name", name); qry.bindValue(":report_source", src); qry.bindValue(":report_descrip", desc); qry.bindValue(":report_grade", grade); } if(qry.exec()) { lastSaveToDb = TRUE; setModified(FALSE); dbRecordName = name; dbRecordGrade = grade; if(_handler) { q.exec(); if(q.first()) _handler->sReportsChanged(q.value("report_id").toInt(), true); else _handler->sReportsChanged(-1, true); } return TRUE; } else { // no good lets tell the user QSqlError sqlErr = qry.lastError(); QMessageBox::critical(this,tr("Error saving to database"),sqlErr.databaseText()); } } return FALSE; }