欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QT連接SQLServer數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

 更新時(shí)間:2023年09月15日 09:26:47   作者:JYliangliang  
要使用Qt連接SQL Server數(shù)據(jù)庫(kù),需要使用Qt提供的SQL模塊和SQL Server驅(qū)動(dòng)程序,具有一定的參考價(jià)值,感興趣的可以了解一下

1、安裝SQLServer數(shù)據(jù)庫(kù)后

在SQL Server 配置管理器中

設(shè)置后,需要重新啟動(dòng)SQL Server服務(wù) 

2、重點(diǎn)* 配置ODBC數(shù)據(jù)源

由于沒(méi)有配置ODBC,一直無(wú)法連接

開(kāi)始——ODBC數(shù)據(jù)源管理程序(64位)

之后選擇:使用用戶(hù)輸入登錄ID和密碼的SQL Server驗(yàn)證

連接SQL Server以獲得其他配置選項(xiàng)的默認(rèn)設(shè)置

登錄ID:sa

密碼:xxx

之后更改默認(rèn)數(shù)據(jù)庫(kù)

選擇下一步,點(diǎn)擊測(cè)試數(shù)據(jù)源——如果顯示 測(cè)試成功,則完成

3、QT 編寫(xiě)代碼,連接數(shù)據(jù)庫(kù)

DatabaseProject.pro  添加sql

#include "widget.h"
#include <QApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>
bool OpenDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    qDebug()<<"ODBC driver is valid: "<<db.isValid();
    QString dsn = QString::fromLocal8Bit("QTDSN");
    db.setHostName("localhost");
    db.setDatabaseName(dsn);
    db.setUserName("sa");
    db.setPassword("xxx");
    if(db.open())  // 注意此處,是open(),不是isOpen()
    {
        qDebug()<<"open database success!";
        return true;
    }
    else
    {
        qDebug()<<db.lastError().text();
        QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());
        return false;
    }
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    OpenDatabase();
    return a.exec();
}

輸出open database success,則為連接 數(shù)據(jù)庫(kù)成功

4、嘗試實(shí)現(xiàn)遠(yuǎn)程電腦連接數(shù)據(jù)庫(kù)

連接遠(yuǎn)程電腦數(shù)據(jù)庫(kù)

首先,明確遠(yuǎn)程電腦ip地址,ping后看能否成功

其次,如果連接不上,查看是否關(guān)閉了電腦的防火墻

然后,在ODBC數(shù)據(jù)源管理中,在服務(wù)器處填寫(xiě)ip地址

最后,選擇指定的數(shù)據(jù)庫(kù),測(cè)試查看是否連接成功

5、實(shí)現(xiàn)增刪改查功能

#include "widget.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <sql_info.h>
// 連接sqlserver 數(shù)據(jù)庫(kù)
// Qt GUI應(yīng)用程序 《 Qt QODBC 數(shù)據(jù)庫(kù)驅(qū)動(dòng) 《 SQL數(shù)據(jù)庫(kù)
// 目標(biāo):
// 連接主機(jī)數(shù)據(jù)庫(kù),獲取數(shù)據(jù)庫(kù)表中數(shù)據(jù)
// 實(shí)現(xiàn)add delete update select 表中數(shù)據(jù),向一個(gè)表實(shí)現(xiàn)即可
// 向指定表中插入數(shù)據(jù)
// 增加數(shù)據(jù)
bool insert_info(QSqlDatabase db, QString insert_command, Sql_Info *info)
{
    QSqlQuery ins_qry(db);
    ins_qry.prepare(insert_command);
    ins_qry.bindValue(":xx", info->get_xx());
    ins_qry.bindValue(":xx", info->get_xx());
    ins_qry.bindValue(":xx", info->get_xx());
    ins_qry.bindValue(":xx", info->get_xx());
    ins_qry.bindValue(":xx", info->get_xx());
    ins_qry.bindValue(":xx", info->get_xx());
    ins_qry.bindValue(":xx", info->get_xx());
    ins_qry.bindValue(":xx", info->get_xx());
    bool ins_res = ins_qry.exec();
    if(ins_res)
        qDebug()<<"插入數(shù)據(jù)成功";
    else
        qDebug()<<"插入數(shù)據(jù)失敗";
    return ins_res;
}
// 刪除數(shù)據(jù)
bool delete_info(QSqlDatabase db, QString del_command, QString del_name)
{
    QSqlQuery del_qry(db);
    del_qry.prepare(del_command);
    del_qry.addBindValue(del_name);
    bool del_res = del_qry.exec();
    if(del_res)
        qDebug()<<"刪除成功";
    else
        qDebug()<<"刪除失敗";
    return del_res;
}
// 修改表中數(shù)據(jù)
bool update_info(QSqlDatabase db, QString update_command, int xx, int xx, QString xx)
{
    QSqlQuery update_qry(db);
    update_qry.prepare(update_command);
    update_qry.addBindValue(xx);
    update_qry.addBindValue(xx);
    update_qry.addBindValue(xx);
    bool update_res = update_qry.exec();
    if(update_res)
        qDebug()<<"更新成功";
    else
        qDebug()<<"更新失敗";
    return update_res;
}
// 查詢(xún)指定表中數(shù)據(jù)
QList<Sql_Info*> query_table_info(QSqlDatabase db, QString query_command)
{
    QList<Sql_Info*> sql_list;
    // 查詢(xún)
    QSqlQuery qry(db); // 獲取數(shù)據(jù)庫(kù)
    if(qry.exec(query_command)){
        int sql_size = 0; // 記錄表中數(shù)據(jù)數(shù)量
        while(qry.next())
        {
            if(qry.isValid())
            {
                int xx= qry.value(0).toUInt();
                QString xx= qry.value(1).toString();
                QString xx= qry.value(2).toString();
                int xx= qry.value(3).toUInt();
                Sql_Info * si = new Sql_Info(xx, xx, xx, xx);
                sql_list.append(si);
                qDebug()<<QString("xx:%1; xx:%2; xx:%3").arg(xx).arg(xx).arg(xx);
            }
            sql_size++;
        }
    }
    //qDebug()<<sql_list[1]->get_name();
    return sql_list;
}
// 打開(kāi)數(shù)據(jù)庫(kù),查看是否連接成功
bool OpenDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); // 數(shù)據(jù)庫(kù)驅(qū)動(dòng)類(lèi)型SQLServer
    qDebug()<<"ODBC driver is valid: "<<db.isValid();
    QString dsn = QString::fromLocal8Bit("QTHostDBDSN");  // 數(shù)據(jù)庫(kù)名稱(chēng)
    db.setHostName("10.40.19.9");
    db.setDatabaseName(dsn);
    db.setUserName("sa");
    db.setPassword("123");
    if(db.open())
    {
        qDebug()<<"數(shù)據(jù)庫(kù)打開(kāi)成功";
        // 查詢(xún)數(shù)據(jù)庫(kù)中指定表數(shù)據(jù)
        //QString command = "SELECT * FROM xx表";
        //QList<Sql_Info*> res = query_table_info(db, command);
        // 向表中插入數(shù)據(jù)
        //QString insert_command = "INSERT INTO xx表(xx,xx,xx,xx,xx,xx,xx,xx) VALUES (:xx,:xx,:xx,:xx,:xx,:xx,:xx,:xx)";
        //Sql_Info *v = new Sql_Info("12345679", "張三", 2, "xx", 9, 10, 80, 0);
        //insert_info(db, insert_command, v);
        QSqlQuery insert_qry(db);
        QString sel_command = "SELECT * FROM xx表";
        if(insert_qry.exec(sel_command))
        {
            QString ins_qry_str = "INSERT INTO xx表"
        }
        // 刪除表中數(shù)據(jù)
        //QString delete_command = "DELETE FROM xx表 WHERE xx=?";
        //QString delete_name = "張三";
        //delete_info(db, delete_command, delete_name);
        // 修改表中數(shù)據(jù)
        //QString update_command = "UPDATE xx表 SET xx=?, xx=? WHERE xx=?";
        //update_info(db, update_command, 11, 80, "xx");
        return true;
    }
    else
    {
        qDebug()<<"數(shù)據(jù)庫(kù)打開(kāi)失敗";
        qDebug()<<db.lastError();
        QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text());
        return false;
    }
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    OpenDatabase();
    return a.exec();
}

到此這篇關(guān)于QT連接SQLServer數(shù)據(jù)庫(kù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)QT連接SQLServer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • c++11?類(lèi)中關(guān)于default、explict、implicit、noexcept、final的詳解

    c++11?類(lèi)中關(guān)于default、explict、implicit、noexcept、final的詳解

    這篇文章主要介紹了c++11?類(lèi)中關(guān)于default、explict、implicit、noexcept、final的詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 教你用c++從頭開(kāi)始實(shí)現(xiàn)決策樹(shù)

    教你用c++從頭開(kāi)始實(shí)現(xiàn)決策樹(shù)

    從頭實(shí)現(xiàn)一個(gè)分類(lèi)決策樹(shù)分類(lèi)器似乎是一個(gè)適當(dāng)?shù)奶魬?zhàn)。這已經(jīng)被證明是一個(gè)測(cè)試但有益的學(xué)習(xí)旅程,我想分享一些我在這個(gè)過(guò)程中的主要經(jīng)驗(yàn),對(duì)c++實(shí)現(xiàn)決策樹(shù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • 解決C++ openCV無(wú)法讀取視頻但是可以讀取圖像的問(wèn)題記錄

    解決C++ openCV無(wú)法讀取視頻但是可以讀取圖像的問(wèn)題記錄

    在使用OpenCV的cv::VideoCapture讀取視頻文件時(shí),可能會(huì)遇到無(wú)法讀取特定格式,如MP4的視頻文件的問(wèn)題,本文介紹解決C++ openCV無(wú)法讀取視頻但是可以讀取圖像的問(wèn)題記錄,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • C語(yǔ)言實(shí)現(xiàn)三角函數(shù)表

    C語(yǔ)言實(shí)現(xiàn)三角函數(shù)表

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言三角函數(shù)表,打印出相對(duì)應(yīng)的三角函數(shù)值,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C語(yǔ)言互換最大值與最小值的位置

    C語(yǔ)言互換最大值與最小值的位置

    大家好,本篇文章主要講的是C語(yǔ)言互換最大值與最小值的位置,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)多項(xiàng)式的相加

    C語(yǔ)言實(shí)現(xiàn)多項(xiàng)式的相加

    這篇文章主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)多項(xiàng)式的相加,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語(yǔ)言報(bào)錯(cuò):Null Pointer Dereference的解決方案

    C語(yǔ)言報(bào)錯(cuò):Null Pointer Dereference的解決方案

    Null Pointer Dereference(空指針解引用)是C語(yǔ)言中常見(jiàn)且危險(xiǎn)的內(nèi)存管理錯(cuò)誤,它通常在程序試圖訪(fǎng)問(wèn)通過(guò)空指針(NULL pointer)引用的內(nèi)存地址時(shí)發(fā)生,本文將詳細(xì)介紹Null Pointer Dereference的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下
    2024-06-06
  • 淺析C++中的多態(tài)與文件操作

    淺析C++中的多態(tài)與文件操作

    多態(tài)是面向?qū)ο缶幊蹋∣OP)的核心概念之一,它允許對(duì)象在相同操作下表現(xiàn)出不同的行為,本文主要為大家介紹了C++中多態(tài)與文件操作的相關(guān)知識(shí),希望對(duì)大家有所幫助
    2024-04-04
  • 關(guān)于C++虛繼承的內(nèi)存模型問(wèn)題

    關(guān)于C++虛繼承的內(nèi)存模型問(wèn)題

    C++虛繼承的內(nèi)存模型是一個(gè)老生常談的話(huà)題,實(shí)現(xiàn)方法主要依賴(lài)于編譯器,本文從多個(gè)角度通過(guò)代碼詳解C++中虛繼承的內(nèi)存模型知識(shí),感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • C++11、C++14、C++17、C++20常用新特性

    C++11、C++14、C++17、C++20常用新特性

    本文主要介紹了C++11、C++14、C++17、C++20常用新特性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論