QT与数据库的连接,查询和修改

一:QT与数据库的连接(通过ODBC)

首先在SQL数据库中设置用户名及密码后通过控制面板查找ODBC根据提示完成对QT的连接

;接下来到qt的main.cpp中输入:

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

//数据库驱动类型为SQL Server,a为设置的数据库名称,可以随便写

             qDebug()<<"ODBC driver?"<<db.isValid();

 

             db.setHostName("127.0.0.1"); // 选择本地主机,127.0.0.1(无需修改)

QString dsn = QString::fromLocal8Bit("water_check2");//数据源名称, 【根据自己在ODBC上设置的名称】

            db.setHostName("localhost");

           db.setDatabaseName(dsn); //设置数据源名称(不用改)

             db.setUserName("sa"); //登录用户【自己设置的数据库用户名】

             db.setPassword("123456789"); //【自己设置的数据库用户名密码

             if(!db.open()) //打开数据库

             {

                 qDebug()<<"error";

                qDebug()<<db.lastError().text();

                QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text()); //打开失败

 

             }

             else

             {

                 qDebug()<<"database open success!";

 

             }

  // QSqlQuery query();//打开数据库,若只有一个数据库连接,直接默认打开有两个需输入上面设置的名字a

QSqlQuery query;

 

 

 

 

   query=QSqlQuery(db);

 

             return a.exec();

二:qt页面跳转设置

点击文件->新建文件或项目->选择QT->QT item Model根据提示修改项目名称

d26b5f9d7d784f2fa61a3090f77f6318.png

 

 选用load作为示例:在laod.ui中设置Push Button 单击右键选择转入槽

b817e10433064f9c8058ec315793eee3.png

 选用load作为示例:在laod.ui中设置Push Button 单击右键选择转入槽在槽函数中加入:

this->hide();

    emit returnmain(); //隐藏当前页面

并在load.h中

signals:

    void returnmain();//跳转页面的信号与上文中槽函数发射的信号相同

在main.cpp中加入头文件

#include<load.h>

 

并在main()函数中写上

load loadpage;//定义一个变量

loadpage.setWindowTitle("主页(load)");

//当按下时从load返回个人信息页

QObject::connect(&loadpage,SIGNAL(information()),&informpage,SLOT(in()));

同理在要跳入的做如下设置:

在main.cpp中加入头文件

#include"inform.h"

加上

inform informpage;

informpage.setWindowTitle("个人信息页(inform)");

并在inform.h中的private slots:下写上

 void in(); //接受槽

9d124c06cac0490ca64fe137663b4f07.png

 三:数据库的查询:

3.1:查询整个表中数据:

QSqlQueryModel *model2 = new QSqlQueryModel(this);

    model2->setQuery(QString("select * from CUST "));

 

    ui->tableView->setModel(model2);

3abadad1a37d43dea0aff03b176bfc68.png

 3.2 条件查询

方法一:

QString s1,s2,cno0;//定义QString类型变量

 

    s1=ui->ok->text();

    s2=ui->lineEdit_2->text();//获取输入的文本信息

    int t=s1.toInt();

    //在数据库中查询所有信息

    QSqlQueryModel *model2 = new QSqlQueryModel(this);

    model2->setQuery(QString("select * from order1 "));

//查询结果显示在table view上

   ui->tableView->setModel(model2);

 

QSqlQuery query("SELECT * FROM order1 ");

 

   qDebug()<<"订单编号 份数 单价 顾客编号 报刊编号"; // OPeration

   while (query.next())

   {

      QString ID = query.value(0).toString();

       QString LoginName = query.value(1).toString();

       QString LoginTime = query.value(2).toString();

       QString LogoutTime = query.value(3).toString();

        QString youbian = query.value(4).toString();

 

int x=QString::compare(LogoutTime,s2,Qt::CaseInsensitive);//区分大小写

 qDebug()<<x<<" "<<QString("%1").arg(s2);

       qDebug()<<QString("%1 %2 %3 %4 %5")

       .arg(ID).arg(LoginName).arg(LoginTime).arg(LogoutTime).arg(youbian);

       if(x==1){

            qDebug()<<"true";

            ui->lineEdit_3->setText(ID);

            ui->lineEdit_5->setText(LoginName);

             ui->lineEdit_6->setText(LoginTime);

             ui->lineEdit_4->setText(youbian);

       }

dd7a004067bf4c848e48e975765c630a.png

 方法二:

 QString sql,s1;

            int s2,s3;

    s1=ui->lineEdit->text();//读取文本内容

    s2=ui->lineEdit_2->text().toInt();

     s3=ui->lineEdit_3->text().toInt();

 

  //查询数据库中是否有相应编号的报刊,并输出总价

    QSqlQueryModel *model=new QSqlQueryModel(this);

    model->setQuery(QString("select PPR from NEWS where PNO=%1").arg(s1));

三修改数据库:先获取文本了个信息

 QSqlQueryModel *model2 = new QSqlQueryModel(this);

    model2->setQuery(QString("select * from CUST "));

 

 

    ui->tableView->setModel(model2);

 

       QString name=ui->lineEdit->text();

       QString address=ui->lineEdit_2->text();

       QString numb=ui->lineEdit_3->text();

       QString you=ui->lineEdit_4->text();

三:数据修改

方法一:

QSqlQuery query;
 QString sql=QString("update CUST set CAD='%1' , CTE='%2' ,CPO='%3' where CNA='%4';")
               .arg(address).arg(numb).arg(you).arg(name);
query.prepare(sql);

if(query.exec()){
      QMessageBox::information(this,"修改成功","修改完成");
}
else{
    QMessageBox::information(this,"修改失败","修改失败!!");

}

 

方法二:

 

QSqlQuery query;

query.prepare("update CUST set CAD=:address ,CTE=:numb ,CPO=:you where CNA=:name;");

       query.bindValue(":name",name);

       query.bindValue(":address",address);

       query.bindValue(":numb",numb);

       query.bindValue(":you",you);

       bool ok = query.exec();

        qDebug()<<"****"<<query.lastError();

       if(!ok){

            QMessageBox::information(this,"修改失败","修改失败!!");

 

       }

       else{

            QMessageBox::information(this,"修改成功","修改完成");

 

 

  • 6
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半截詩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值