#include "synctask.h" #include "QMap" SyncTask::SyncTask(const QSqlDatabase &srcDb, const QSqlDatabase &dstDb, const QString &tableName) { sourceDatabase=srcDb; destinationDatabase=dstDb; SyncTask::tableName=tableName; } void SyncTask::run() { this->syncTable(); } QMap<int,QList<QString>> SyncTask::syncTable() { QMap<int,QList<QString>> Info; int errorindex=0; QList<QString> errorinfo; // 清空目标数据库中的表数据 QSqlQuery clearQuery(destinationDatabase); clearQuery.prepare("DELETE FROM " + tableName); if (!clearQuery.exec()) { qDebug() << "Error clearing table:" << clearQuery.lastError().text(); errorindex=1; errorinfo.append("删除本地表:"+tableName+"时出错"); } // 从源数据库复制数据到目标数据库 QSqlQuery copyQuery(sourceDatabase); copyQuery.prepare("SELECT * FROM " + tableName); if (!copyQuery.exec()) { qDebug() << "Error selecting from source table:" << copyQuery.lastError().text(); errorindex=1; errorinfo.append("查询主系统表:"+tableName+"时出错"); } while (copyQuery.next()) { // 构建插入语句并执行 QStringList values; for (int i = 0; i < copyQuery.record().count(); ++i) { values << copyQuery.value(i).toString(); // 简化处理,可能需要更复杂的逻辑 } QSqlQuery insertQuery(destinationDatabase); insertQuery.prepare("INSERT INTO " + tableName + " VALUES (" + values.join(",") + ")"); if (!insertQuery.exec()) { qDebug() << "Error inserting into destination table:" << insertQuery.lastError().text(); errorindex=1; errorinfo.append("添加本地系统表:"+tableName+"时出错"); break; // 或者可以记录错误并继续 } } Info.insert(errorindex,errorinfo); return Info; }