您的位置:首页 > 编程语言 > Qt开发

QT连接Sql Sever数据库

2015-06-10 22:38 369 查看
                   QT与Sql sever 2012的连接

 源码链接:http://download.csdn.net/detail/zkpingguo/8740147

1.需要先想pro文件中添加如下行,表示加载模块:

QT       +=coreguisql

 

 

2.包含头文件

#include<QSqlDatabase>

#include<QSqlError>

#include<QMessageBox>

#include<QSqlQueryModel>

 

3.数据库的连接(这里先不设置用户名和密码)

voidOpenDatabase()

{

    QSqlDatabasedb=QSqlDatabase::addDatabase("QODBC");

    db.setDatabaseName(QString("DRIVER={SQLSERVER};"

                               "SERVER=%1;"//服务器名称

                               "DATABASE=%2;"//数据库名

                             //  "UID=%3;"           //登录名

                             //  "PWD=%4;"        //密码

                               ).arg("ZHAOPANPAN-PC")

                       .arg(QObject::tr("高考成绩"))  //注意这里的操作

                      //.arg("zk")

                      //.arg("password")

                       );

    if(!db.open())

    {

        QMessageBox::critical(0,qApp->tr("Cannotopendatabase"),

                              db.lastError().databaseText(),QMessageBox::Cancel);

    }

}

 

4.当连接了数据库后,下一步就是查询操作,在界面上添加一个pushbutton和tableview,然后设置pushbutton的槽函数,如下

方法一:

voidWidget::on_BtnCheck_clicked()

{

        QSqlQueryModel*model=newQSqlQueryModel;

        model->setQuery(tr("select*frommember"));//这里直接设置SQL语句,忽略最后一个参数

        ui->tableView->setModel(model);

        ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//使得tableView不可编辑

        ui->tableView->setAlternatingRowColors(true);

        ui->tableView->resizeColumnsToContents();   //按照内容调整列大小

        ui->tableView->verticalHeader()->hide();    //隐藏左侧行号

        ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);//按照行选择

        ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);//按照行选择

        introw_count=model->rowCount();   //设置行高

           for(inti=0;i<row_count;i++)

           {

               ui->tableView->setRowHeight(i,20);

           }

}

此时就可以查到数据了。

方法二:

在widget.h中声明变量:

QSqlTableModel*model;

然后在构造函数中添加如下代码

model=newQSqlTableModel(this);

    model->setTable("member");//选择使用的数据表

    model->select();//选择表中的所有数据

    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    ui->tableView->setModel(model);

    introw_count=model->rowCount();   //设置行高

       for(inti=0;i<row_count;i++)

       {

           ui->tableView->setRowHeight(i,20);

       }

        ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//使得tableView不可编辑

        ui->tableView->setAlternatingRowColors(true);

        ui->tableView->resizeColumnsToContents();   //按照内容调整列大小

        ui->tableView->verticalHeader()->hide();    //隐藏左侧行号

        ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);//按照行选择

        ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);//按照行选择

}

 

5.提交数据库的修改

 

model->database().transaction();

    if(model->submitAll()){

        model->database().commit();

    }

    else{

        model->database().rollback();

        QMessageBox::information(this,tr("tableModel"),tr("数据库错误!"));

    }

6.取消数据库的修改

  model->revertAll();

 

7.插入操作(添加记录)

introwNum=model->rowCount();

    intid=10;

    model->insertRow(rowNum);  //添加一行

model->setData(model->index(rowNum,0),id);

 

8.删除记录

    intcurRow=ui->tableView->currentIndex().row();

    model->removeRow(curRow);

    intOK=QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"),QMessageBox::Yes,QMessageBox::No);

    if(OK==QMessageBox::No)

    {

        model->revertAll();

    }

    else

    {

        model->submitAll();

    }

 

9.按照id升序

model->setSort(0,Qt::AscendingOrder);  //id是第0列

model->select();

10.按照id降序

model->setSort(0,Qt::AscendingOrder);  //id是第0列

model->select();

 

 

 

11.按照字段查询

 QStringname=ui->lineEdit->text();

    model->setFilter(QObject::tr("name='%1'").arg(name));

    model->select();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  QT sql sever