使用QSqlQueryModel +tableview 不能显示数据

最近弄一个QT的项目,需要SQLITE和SQLSERVER数据库同时支持,使用QSqlQueryModel +tableview显示数据,非常奇怪的事情发生了,使用SQLITE能正常显示数据,当使用SQL数据库的时候,只显示空行(比如5条记录,就显示5个空行,表头可以显示),数据不显示,检查确实查询到数据,但就是不显示,网上看到说不关闭数据库就能显示,测试后发现确实是这样,可以显示,但只要在窗体里面新增数据后,再刷新,又不显示了,不知哪里的问题,希望得到大家的帮助,源码如下:

//连接数据库


bool md::openDB(const QString& connectName)
{
    if (SQLLEIXING=="SQL")
    {
        idName = connectName;
        const QString connID(connectName);
        if(QSqlDatabase::contains("qt_sql_default_connection"))
           database = QSqlDatabase::database("qt_sql_default_connection");
        else
           database=QSqlDatabase::addDatabase("QODBC");

        QString SQLSTR= QString("DRIVER={SQL SERVER};"
                         "SERVER=%1;"
                         "DATABASE=%2;"
                         "UID=%3;"
                         "PWD=%4;"
                        ).arg(SERVER)
                         .arg("SENTRY_86GB")
                         .arg(UNAME)
                         .arg(PWD);
        database.setDatabaseName(SQLSTR);
        if (!database.open())
        {
            qWarning("Cannot open database,please reboot!");
            QMessageBox::critical(0, qApp->tr("Cannot open database"),
                database.lastError().databaseText(), QMessageBox::Cancel);
            return false;
        }
        return true;
    }
    else
    {
        idName = connectName;
        const QString connID(connectName);
        if(QSqlDatabase::contains("qt_sql_default_connection"))
           database = QSqlDatabase::database("qt_sql_default_connection");
        else
           database = QSqlDatabase::addDatabase("QSQLITE");

        QString DatabasePath = QCoreApplication::applicationDirPath() + "/sentry"; //获取当前数据库路径
        database.setDatabaseName(DatabasePath);
        database.setUserName("");
        database.setPassword("");

        if (!database.open())
        {
            qDebug() << "Error: Failed to connect database." << database.lastError();
            return false;
        }
        return true;

    }
}

 //frmjigou.h
namespace Ui {
class frmjigou;
}

class frmjigou : public QWidget
{
    Q_OBJECT

public:
    explicit frmjigou(QWidget *parent = nullptr);
    ~frmjigou();
    QSqlQueryModel  *mode;
    bool  finddata(QString strsql);

private:
    Ui::frmjigou *ui;


private slots:
    void on_listWidget_itemClicked(QListWidgetItem *item);
    void onStateChanged(int state) ;
    void on_tableView_clicked(const QModelIndex &index);

};

#endif // FRMJIGOU_H


 //frmjigou.c
 
//显示数据
bool  frmjigou::finddata(QString strsql)
{
    md db;
    ui->tableView->clearSpans();
    bool ok=db.openDB("frmjigou");
    if(!ok)
    {
           QMessageBox::warning(this,"错误","未连接,请检查.");
          return false;
    }
    mode = new myTableModel(this);     //myTableModel类是为了实现表格单击,双击
   mode->setQuery(QString(strsql),db.database);

   mode->setHeaderData(0,Qt::Horizontal,tr(""));
   mode->setHeaderData(1, Qt::Horizontal, tr("编号"));
   mode->setHeaderData(2, Qt::Horizontal, tr("机构名称"));
   while (mode->canFetchMore())
             mode->fetchMore();
   ui->tableView->setModel(mode);
   ui->tableView->show();
  ui-> tableView-> setAlternatingRowColors( true); //使表格颜色交错功能为真 
  ui->tableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
  ui->tableView->horizontalHeader()->setStretchLastSection(true);
  ui->tableView->setColumnWidth(0, 35);  
  ui->tableView->setColumnWidth(1, 50);   
  ui->tableView->setColumnWidth(2, 100); 
  db.closeDB();       
  return true;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值