Newer
Older
AutomaticVerification / softwareDirectory / AutoVerScheme / synctask.cpp
李现川 on 31 Mar 2024 1 KB no commit message
#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;

}