QT 5 通过ODBC连接SQL SERVER
学习笔记:
1:找个SQL server 数据库 我就拿我的财务辅助系统开刀了
2: windows上建立ODBC了 这个就不多写了
3:qt新建个工程 再PRO文件里加上
QT += sql
下面是一部分代码
#include "widget.h"
#include "ui_widget.h"
#include <QApplication>
#include <QtSql/QSql>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QtSql/QSqlError>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
bool OpenDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");   //数据库驱动类型为SQL Server
    QString dsn = QString::fromLocal8Bit("dfcwfz");      //数据源名称
    db.setHostName("192.168.210.3");                        //选择SQL SERVER服务器
    db.setDatabaseName(dsn);                            //设置数据源名称
    db.setUserName("sa");                               //登录用户
    db.setPassword("*******");                              //密码
    if(!db.open())                                      //打开数据库
    {
        qDebug()<<db.lastError().text();
        QMessageBox::critical(0, QObject::tr("数据库打开失败!"), db.lastError().text());
        return false;                                   //打开失败
    }
    else
    {
        qDebug()<<"数据库打开成功!";
        QSqlQuery query(db); //查询  系统参数  表并输出,测试能否正常操作数据库
        query.exec("SELECT * FROM  系统参数");
        while(query.next())
        {
            qDebug()<<query.value(0).toInt() <<query.value(1).toString() <<query.value(2).toInt();
        }
    }return true;
}
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    OpenDatabase();
}
Widget::~Widget()
{
    delete ui;
}一下为运行结果
进阶版:
使用全局变量:
头文件里
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtSql/QSql>
#include <QtSql/QSqlError>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlQueryModel>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
    static QSqlDatabase db ;  //定义全局变量
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H这里是使用了<QTableWidget> 来显示表格里的数据 全局变量作为数据库链接,调用方便一点
#include "widget.h"
#include "ui_widget.h"
#include <QApplication>
#include <QTableWidget>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
QSqlDatabase Widget::db = QSqlDatabase::addDatabase("QODBC");
bool OpenDatabase()
{
     //数据库驱动类型为SQL Server
    qDebug()<<"ODBC driver?"<<Widget::db.isValid();
    QString dsn = QString::fromLocal8Bit("dfcwfz");      //数据源名称
    Widget::db.setHostName("192.168.210.3");                        //选择数据库
    Widget::db.setDatabaseName(dsn);                            //设置数据源名称
    Widget::db.setUserName("sa");                               //登录用户
    Widget::db.setPassword("*********");                              //密码
    if(!Widget::db.open())                                      //打开数据库
    {
        qDebug()<<Widget::db.lastError().text();
        QMessageBox::critical(0, QObject::tr("打开数据库失败!!"), Widget::db.lastError().text());
        return false;                                   //打开失败
    }
    else
    {
        qDebug()<<"打开数据库成功!";
    }return true;
}
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //显示QtableWidget
    //加水平表头
     //打开数据库
    if(OpenDatabase()){
        //成功执行查询语句
        QSqlQuery query(Widget::db); //查询 表并输出,测试能否正常操作数据库
        query.exec("SELECT * FROM  系统参数");
        QStringList list1;
        list1.clear();
        list1<<"类型"<<"名称"<<"说明"<<"值";
        ui->tableWidget->setColumnCount(list1.size());
        ui->tableWidget->setHorizontalHeaderLabels(list1);
        int row=0;
        ui->tableWidget->setRowCount(20); //暂时设置成20行
        while(query.next())
        {
            ui->tableWidget->setItem(row,0,new QTableWidgetItem(query.value(1).toString()));
            ui->tableWidget->setItem(row,1,new QTableWidgetItem(query.value(2).toString() ));
            ui->tableWidget->setItem(row,2,new QTableWidgetItem(query.value("说明").toString()));
            ui->tableWidget->setItem(row,3,new QTableWidgetItem(query.value("值").toString() ));
            row++;
        }
    }
}
Widget::~Widget()
{
    delete ui;
}运行结果如图:



登录后可发表评论
点击登录