带 MS Access 的 QtSQL:UPDATE/DELETE 查询不更新数据
QtSQL with MS Access : UPDATE/DELETE queries not updating data
我目前在使用 QtSQL 和 MS Access 数据库以及 QOBDC 驱动程序时遇到问题。
SELECT 和 INSERT 语句有效,read/insert 数据正常。
UPDATE/DELETE 语句被正确处理(根据 QSqlQuery 和 OBDC 跟踪器),但在 MS Access 中,数据未被编辑。
我目前正在使用“?”请求的绑定,但用硬编码数据替换这些绑定也不起作用。
OBDC 跟踪器看到更新请求以及 2 个绑定。
这些 UPDATE 语句不修改 MS Access 的数据是否有原因?
数据库
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(QString("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=") + file);
删除函数
bool MSAccessReader::deleteRecord(QString table, QString where)
{
QString req;
req = QString("DELETE FROM ") + table + QString(" WHERE ") + where;
QSqlQuery query;
bool ok = query.exec(req);
return ok;
}
更新函数
bool MSAccessReader::update(QList<QString> headers, QList<QVariant> data, QString where, QString table)
{
if(headers.isEmpty() || data.isEmpty())
{
qDebug() << "Headers or data are empty";
return false;
}
else if(headers.size() != data.size())
{
qDebug() << "Number of headers and data fields mismatches";
return false;
}
else if(table.isEmpty())
{
qDebug() << "Table isn't specified";
return false;
}
else if(where.isEmpty())
{
qDebug() << "WHERE isn't specified";
return false;
}
QSqlQuery query;
QString req;
req = QString("UPDATE ") + table + QString(" SET ");
foreach(QString header, headers)
{
req = req + header + "=?,";
}
req = req.left(req.size()-1);
/*WHERE*/
req = req + QString(" WHERE ") + where + QString(";");
query.prepare(req);
foreach(QVariant var,data)
{
query.addBindValue(var);
}
qDebug() << query.lastQuery() << query.boundValues();
bool ok = query.exec();
return ok;
}
请求字符串和数据
"UPDATE Table1 SET Nom=?,Prenom=? WHERE ID=1;" QMap((":a", QVariant(QString, "Jean"))(":bb", QVariant(QString, "Marc")))
数据table
找到问题了。
我需要围绕查询执行 transaction() 和 comet() :
db.transaction();
bool ok = query.exec();
db.commit();
我目前在使用 QtSQL 和 MS Access 数据库以及 QOBDC 驱动程序时遇到问题。
SELECT 和 INSERT 语句有效,read/insert 数据正常。
UPDATE/DELETE 语句被正确处理(根据 QSqlQuery 和 OBDC 跟踪器),但在 MS Access 中,数据未被编辑。
我目前正在使用“?”请求的绑定,但用硬编码数据替换这些绑定也不起作用。
OBDC 跟踪器看到更新请求以及 2 个绑定。
这些 UPDATE 语句不修改 MS Access 的数据是否有原因?
数据库
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(QString("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=") + file);
删除函数
bool MSAccessReader::deleteRecord(QString table, QString where)
{
QString req;
req = QString("DELETE FROM ") + table + QString(" WHERE ") + where;
QSqlQuery query;
bool ok = query.exec(req);
return ok;
}
更新函数
bool MSAccessReader::update(QList<QString> headers, QList<QVariant> data, QString where, QString table)
{
if(headers.isEmpty() || data.isEmpty())
{
qDebug() << "Headers or data are empty";
return false;
}
else if(headers.size() != data.size())
{
qDebug() << "Number of headers and data fields mismatches";
return false;
}
else if(table.isEmpty())
{
qDebug() << "Table isn't specified";
return false;
}
else if(where.isEmpty())
{
qDebug() << "WHERE isn't specified";
return false;
}
QSqlQuery query;
QString req;
req = QString("UPDATE ") + table + QString(" SET ");
foreach(QString header, headers)
{
req = req + header + "=?,";
}
req = req.left(req.size()-1);
/*WHERE*/
req = req + QString(" WHERE ") + where + QString(";");
query.prepare(req);
foreach(QVariant var,data)
{
query.addBindValue(var);
}
qDebug() << query.lastQuery() << query.boundValues();
bool ok = query.exec();
return ok;
}
请求字符串和数据
"UPDATE Table1 SET Nom=?,Prenom=? WHERE ID=1;" QMap((":a", QVariant(QString, "Jean"))(":bb", QVariant(QString, "Marc")))
数据table
找到问题了。
我需要围绕查询执行 transaction() 和 comet() :
db.transaction();
bool ok = query.exec();
db.commit();