最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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位)

之后選擇:使用用戶輸入登錄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;
}
// 查詢指定表中數(shù)據(jù)
QList<Sql_Info*> query_table_info(QSqlDatabase db, QString query_command)
{
    QList<Sql_Info*> sql_list;
    // 查詢
    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)類型SQLServer
    qDebug()<<"ODBC driver is valid: "<<db.isValid();
    QString dsn = QString::fromLocal8Bit("QTHostDBDSN");  // 數(shù)據(jù)庫(kù)名稱
    db.setHostName("10.40.19.9");
    db.setDatabaseName(dsn);
    db.setUserName("sa");
    db.setPassword("123");
    if(db.open())
    {
        qDebug()<<"數(shù)據(jù)庫(kù)打開(kāi)成功";
        // 查詢數(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)文章

  • 成員初始化列表與構(gòu)造函數(shù)體中的區(qū)別詳細(xì)解析

    成員初始化列表與構(gòu)造函數(shù)體中的區(qū)別詳細(xì)解析

    無(wú)論是在構(gòu)造函數(shù)初始化列表中初始化成員,還是在構(gòu)造函數(shù)體中對(duì)它們賦值,最終結(jié)果是相同的。不同之處在于,使用構(gòu)造函數(shù)初始化列表的版本初始化數(shù)據(jù)成員,沒(méi)有定義初始化列表的構(gòu)造函數(shù)版本在構(gòu)造函數(shù)體中對(duì)數(shù)據(jù)成員賦值
    2013-09-09
  • C++三大核心特性之多態(tài)詳解

    C++三大核心特性之多態(tài)詳解

    多態(tài)是?個(gè)繼承關(guān)系的下的類對(duì)象,去調(diào)?同?函數(shù),產(chǎn)?了不同的?為,這篇文章主要介紹了C++三大核心特性之多態(tài)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • 一文快速掌握C++雙端數(shù)組容器deque的使用

    一文快速掌握C++雙端數(shù)組容器deque的使用

    本文和大家分享的是和vector容器功能很像的容器——deque,了解deque容器的本質(zhì),使用方法以及與vector容器的不同之處,感興趣的快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 探索Visual C++下創(chuàng)建WPF項(xiàng)目的方法示例

    探索Visual C++下創(chuàng)建WPF項(xiàng)目的方法示例

    這篇文章主要介紹了探索Visual C++下創(chuàng)建WPF項(xiàng)目的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之圖的遍歷(二)

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之圖的遍歷(二)

    這篇文章主要是介紹了利用廣度優(yōu)先算法實(shí)現(xiàn)圖的遍歷,文中利用圖文詳細(xì)的介紹了實(shí)現(xiàn)步驟,對(duì)我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法有一定的幫助,需要的朋友可以參考一下
    2021-12-12
  • C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解順序表

    C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解順序表

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示
    2022-03-03
  • C++ Boost Array與Unordered使用介紹

    C++ Boost Array與Unordered使用介紹

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-11-11
  • C++中register關(guān)鍵字舉例詳解

    C++中register關(guān)鍵字舉例詳解

    register用來(lái)聲明變量,然后聲明出來(lái)的變量是直接放在cpu的寄存器當(dāng)中,而非就是通過(guò)內(nèi)存尋址訪問(wèn),這樣效率更高,下面這篇文章主要給大家介紹了關(guān)于C++中register關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • C++深入講解函數(shù)重載

    C++深入講解函數(shù)重載

    C++ 允許多個(gè)函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function Overloading),借助重載,一個(gè)函數(shù)名可以有多種用途
    2022-07-07
  • C++智能指針shared_ptr

    C++智能指針shared_ptr

    這篇文章主要介紹了C++智能指針shared_ptr,C++11中包括shared_ptr在內(nèi)的多種指針,都是模板類型,意味著使用者可以指定想要操作的類型下文從shared_ptr創(chuàng)建方式展開(kāi)全文,介紹詳細(xì)具有一的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論

锡林郭勒盟| 石台县| 宁蒗| 外汇| 苏尼特右旗| 六盘水市| 封开县| 大方县| 定州市| 新营市| 甘孜| 凭祥市| 沙洋县| 印江| 柳江县| 锡林浩特市| 建昌县| 兰州市| 嘉鱼县| 德江县| 樟树市| 勃利县| 普安县| 托克托县| 长丰县| 襄樊市| 兴义市| 乡宁县| 邵阳县| 桂林市| 新丰县| 嵊州市| 湘潭市| 米易县| 万州区| 吉林市| 东明县| 横山县| 余姚市| 酒泉市| 合山市|