QT4 QOdbc连接 Access


bool MainWindow::openConnection(){
    
    QString accessFile(
"../guestdb.mdb");
    QString dsn 
= QString(
            
"DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=%1").arg(accessFile);

    
const QString PREFIX("puremilk.access.connection");

    QString connID 
= PREFIX + "-" + accessFile;

    db 
= QSqlDatabase::database(connID, false);

    
if( db.isValid() ){
        
if (db.isOpen()){
            ui.edOdbcText
->setText("Already opened.");
            
return true;
        }

    }


    db 
= QSqlDatabase::addDatabase("QODBC", connID);
    db.setDatabaseName(dsn);

   
return db.open();
}




void MainWindow::on_btnOdbcDemo_clicked(){
    
if(!openConnection()){
        ui.edOdbcText
->setText("openConnection() return false.");
    }

    
    QSqlQuery query(db);
    
if ( ! query.exec( "SELECT * FROM guestbook " ) ){
        ui.edOdbcText
->setText("query() failed.");
        
return ; 
    }

        

      dbModel 
= new QSqlQueryModel(this);
    dbModel
->setQuery( query );

    ui.tableView1
->setModel( dbModel );
}


 同样的,连接  SQL SERVER 或者 其它的数据库也是相似的。 只是驱动不相同,修改连接字符串就好了。
 

关于QODBC连接问题

11-01

本人开发环境windows 7 64bit + vs2010 + Qt4.8尝试使用QODBC连接SQL Server,问题很奇特,数据库已经打开了,但是执行SQL语句时,又提示Driver not loaded,很是困惑,请教是何种原因rn代码如下:rn QStringList ssss = QSqlDatabase::drivers();rn QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "test");rn db.setHostName("arkis_pc"); rn QString dsn = QString::fromLocal8Bit("DRIVER=SQL SERVER;SERVER=arkis_pc;DATABASE=Arkist_test");rn db.setDatabaseName(dsn);rn db.setUserName("sa"); rn db.setPassword("test");rn bool ok = db.open();rn if(ok)rn rn QMessageBox::information(this,"database","OK,database is opened");rn QSqlQuery query;rn QString s1,s2,s3,s4;rn bool success = query.exec("select * from test");rn if (!success)rn rn QMessageBox::information(this,"database",query.lastError().text());rn rn while(query.next())rn rn s1 =query.value(0).toString();rn ui.lineEdit_1->setText(s1);rn s2 =query.value(1).toString();rn ui.lineEdit_2->setText(s2);rn s3=query.value(2).toString();rn ui.lineEdit_3->setText(s3);rn s4 =query.value(3).toString();rn ui.lineEdit_4->setText(s4);rn QMessageBox::information(this,"database","next recorder");rn rnrn //写数据库rn QString INSERT = QString("INSERT INTO test(id, time, position, people)"rn "VALUES (:id, :time, :position, :people)");rnrn query.prepare(INSERT);rn query.bindValue(0,QString("123") );rn query.bindValue(1,QString("1234") );rn query.bindValue(2,QString("12345") );rn query.bindValue(3,QString("123456") );rnrn bool sss = query.exec();rn rn elsern QMessageBox::information(this,"database","database Failture"); rn db.close();rnrnrn调试结果:ssss [3]("QSQLITE","QODBC3","QODBC") QStringListrn先提示:database is openedrn然后提示:Driver not loaded Driver not loadedrnrnrn输出窗口提示:rn线程 'Win32 线程' (0x1354) 已退出,返回值为 0 (0x0)。rnQSqlQuery::exec: database not openrn线程 'Win32 线程' (0xb74) 已退出,返回值为 0 (0x0)。rn线程 'Win32 线程' (0x1070) 已退出,返回值为 0 (0x0)。rn线程 'Win32 线程' (0x1148) 已退出,返回值为 0 (0x0)。rnQSqlQuery::prepare: database not openrnrnrn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试