【问题标题】:QSqlQuery.exec(query) returns wrong character for unicode charsQSqlQuery.exec(query) 为 unicode 字符返回错误的字符
【发布时间】:2016-11-30 13:46:09
【问题描述】:

我在 MS SQL 服务器中有一个数据库和我的问题 是 unicode 字符! 我的“getRecordByCondition”方法中的“query.exec(str)”返回“?” char 用于 nvarchar 字段! 但它在“loadToGrid”方法中正确工作。 这是我的代码:

void DataAccess::connect()
{
    db=QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("TestDB");
}

void DataAccess::disConnect()
{
    QString connection;
    connection = db.connectionName();
    db.close();

}
QVariantList DataAccess::getRecordByCondition(QString tableName, QString condition)
{
    connect();
    QVariantList recordData;
    QString str= " select * from " + tableName + " where " + condition ;
    QSqlRecord record;
    QSqlQuery query(db);
    if(db.open())
    {

        // can run
        if(query.exec(str))
        {
            record=query.record();
            int cols=record.count();
            while (query.next())
            {
                for(int i=0;i<cols;i++)
                {
                    qDebug() << query.value(i); // ??????? ????
                    recordData << query.value(i);
                }
            }
            disConnect();
            //return 1;
        }
        else
        {
          qDebug() <<  "problem!" << db.lastError();
            disConnect();
            //return -1;
        }
    }
    else
    {

        qDebug() <<  "db can not open because:" << db.lastError().text();
        //return -2;
    }
   disConnect();
    return recordData;
}



void DataAccess::loadToGrid(QString tableName, QTableView &grid)
{
    connect();
    if(db.open())
    {
        //Load data
        QString qry="select * from " + tableName;
        QSqlRecord record;
        QSqlQuery query(db);
        if(query.exec(qry))
        {
             record=query.record();
             int cols=record.count();
             int rows=0;
             //make model
             QStandardItemModel *myModel=new QStandardItemModel(0,cols,grid.parent());
             //make headers
             for(int i=0;i<cols;i++)
             {
                 myModel->setHorizontalHeaderItem(i,new QStandardItem(record.fieldName(i)));
             }
             while (query.next()) {

                for(int i=0;i<cols;i++)
                {
                    myModel->setItem(rows,i,new QStandardItem(query.value(i).toString()));
                }
                rows++;
             }
             grid.setModel(myModel);

        }
    }
   disConnect();
}

【问题讨论】:

    标签: unicode qsqlquery qodbc


    【解决方案1】:

    我解决了这个问题, 我只是改变了我的连接方法

    void DataAccess::connect()
    {
    
        if(!db.open())
        {
            db=QSqlDatabase::addDatabase("QODBC");
            db.setDatabaseName("TCOM");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多