2016-11-30 6 views
0

У меня есть база данных на сервере MS SQL, и моя проблема - это символы unicode! «query.exec (str)» в моем методе getRecordByCondition возвращает «?» char для полей nvarchar! , но он правильно работает в режиме loadToGrid. вот мой код:QSqlQuery.exec (query) возвращает неправильный символ для символов unicode

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(); 
} 

ответ

0

я решил эту проблему, я только изменил мой метод соединять

void DataAccess::connect() 
{ 

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