• 4810阅读
  • 1回复

请教一个关于数据库打开的问题,open()函数 [复制链接]

上一主题 下一主题
离线erhumusic182
 

只看楼主 倒序阅读 楼主  发表于: 2010-08-23
我的程序当中用一个动态库返回一个QSqlDatabase myDB变量,由此得到数据库的连接,打开后作相应的操作,后来在没有关闭数据库的条件下,发现,数据库竟然关掉了,用myDB.isOpen()判断得到,即使这个时候再open()也会执行不成功,不知道这是为什么。

有谁能给我写提示啊?!
qt爱好者
离线erhumusic182

只看该作者 1楼 发表于: 2010-08-23
                     DbConn dbConn;
    QString tabChnName,tabEngName;//编辑权限(允许1/禁止0)、表格名称
    QString sqlString;
    QSqlDatabase myDB = dbConn.GetDatabase();
    if(!myDB.open())
    {
        QMessageBox::critical(0,QObject::tr("数据库连接错误----"),myDB.lastError().text());
        return;
    }
    QList<QTreeWidgetItem *> treeWidgetItemList = roleAuthEditTree->selectedItems();
    sqlString.append("select name, tbpermmodeforedit, tbpermmodeforead, tbroleforedit, tbroleforead from tbPlateRole where name = '");//角色名、编辑权限(允许1/禁止0)、拥有权限的表格名称
    sqlString.append(sysRoleList->currentText());
    sqlString.append("'");
    QList<QSqlRecord> list = dbConn.GetRecordsbyQueryStr(sqlString);

    for(int i =0;i < treeWidgetItemList.count();i++)
    {
         if(list.count() == 1)
         {
         if(!list.at(0).value(3).toString().contains(tabEngName,Qt::CaseInsensitive))//没有记录此表
         {
             myDB.close();
             if(!myDB.open("vesta","sht2010"))
             {
                 QMessageBox::information(this,tr("提示"),tr("数据库连接打不开!"));
                 QMessageBox::critical(0,QObject::tr("原因:"),myDB.lastError().text());
                 //continue;
             }
             if(!myDB.isOpenError())
             {
                 QMessageBox::information(this,tr("提示"),tr("打开出错!"));
                 //continue;
             }
             if(!myDB.isOpen())
             {
                 QMessageBox::information(this,tr("提示"),tr("数据库处于关闭状态!"));
                 //continue;
             }
             QString tmpEdit;
             if(list.at(0).value(1).toString().toInt() == 0)//禁止模式,已有记录应该删除
             {//加进去
                 tmpEdit.append(list.at(0).value(3).toString());
                 tmpEdit.remove(tabEngName,Qt::CaseInsensitive);
                 if(!dbConn.SetValbyVarName("tbPlateRole",-1,sysRoleList->currentText(),"name",tmpEdit,"tbPlateRole.tbroleforedit"))
                 {
                     QMessageBox::information(this,tr("提示"),tr("更新数据失败!"));
                     QMessageBox::critical(0,QObject::tr("出错原因:"),dbConn.ErrStr());
                     QMessageBox::information(this,tr("sql观察"),dbConn.QueryStr());
                 }
             }
             else if(list.at(0).value(1).toString().toInt() == 1)//允许模式,已经允许。
             {
                 QString tip = tr("已经允许编辑“<font color=#990000>") + tabChnName + tr("</font>”了,操作重复!");
                 QMessageBox::information(this,tr("提示"),tip);
             }
             else
             {
                 QMessageBox::information(this,tr("提示"),tr("权限模式值异常!"));
             }
         }


。。。。。。。。。。。。。。。。。。。
qt爱好者
快速回复
限100 字节
 
上一个 下一个