基於C++ MFC 串連資料庫 小應用 小項目淺析展示

來源:互聯網
上載者:User

標籤:link   就是   字元集   _id   點擊   屬性   資料存放區   win   white   

 

  這裡不知道會不會有人是真的新手 新新手 不知道怎麼 如何建立一個MFC 工程 應該不會吧? 就是 開啟VS 建立項目-MFC -MFC工程-點基於對話方塊 -和在靜態庫中使用 然後點擊完成

注意啦 命名 都用英文 源碼在這https://pan.baidu.com/s/1chRMPK

  工具:vs2013,mysql5.7.6

作業系統:win64位     注意啦 我這裡是VS2013  你們要是拷貝我的工程在其他版本上可能不能用   這時候只要點擊項目 - 屬性-配置屬性 -右邊的工具集 改成你們自己的版本 就行了           

還有  我這裡是 64位的   你們有可能項目是   WIN 32   的  要改     項目 -屬性-右上的  組態管理員-裡面的平台改成X64  不然就會出現一些 什麼什麼變數 在什麼地方引用 之類的錯誤

 

 

設定一些引用檔案的環境變數,基本跟opencv配置過程差不多    如果配置過OpenCV的就知道了     

點擊項目->屬性---改成所有配置--配置->vc++目錄
然後“include目錄”(包含目錄)那把“C:\ProgramFiles\MySQL 5.7.6\include”給加進來 
再然後“lib目錄”(庫目錄)那裡把“C:\ProgramFiles\MySQL 5.7.6\lib”和“C:\ProgramFiles\MySQL 5.7.6\lib\debug”也一起加進來。以上三個檔案在mysql 的安裝目錄下(!!!注意啦 這是我MYSQL的安裝目錄  你們看自己的)    

最後在加一個 項目-屬性-連接器-常規  -附加依賴項 裡 加 libmysql.lib   然後在把這個MYSQL的檔案 拷貝到自己MFC工程的DEBUG  或者代碼放置的地方   //這裡如果不加的話 就要在工程裡面加上

  #pragma comment (lib, "libmysql.lib")      同樣還是要把檔案拷貝到工程裡面去
    #pragma comment (lib, "mysqlclient.lib")

 

 

 

 

還有可能會因為沒有加這個而報錯 這個是MFC 經常的錯誤 #define _CRT_SECURE_NO_DEPRECATE 這個要加在stafx.h裡最上面 也就是 所有標頭檔還沒有載入的時候就要加上去

 

 

好了  下面開始進入正題:

  第一步:  除了代碼給我們的 標頭檔  我們必要的標頭檔也是有要加的:

    1. #include <stdio.h>  
    2. #include <string.h>  
    3. #include <algorithm>  
    4. #include <iostream>  
    5. #include "winsock.h"  
    6. #include "mysql.h" 
    7. #include “Resource.h”

mysql.h 不能開啟 就是 沒有配置好   檢查一下   再不行就 拷貝一份到工程裡面。

第二步:

  先上代碼:  這裡點擊我對話方塊BUTTON 跳轉出來的函數


void CMYSQLLLINKDlg::OnBnClickedButton1()
{
    // TODO:  在此添加控制項通知處理常式代碼

    MYSQL m_sqlCon;
    mysql_init(&m_sqlCon);
    // localhost:伺服器 root/123456為帳號密碼 testa為資料庫名 3306為連接埠    
    if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0))
    {
        AfxMessageBox(_T("訪問資料庫失敗!"));
        CString e = mysql_error(&m_sqlCon);//需要將項目屬性中字元集修改為“使用多位元組字元集”或“未設定”  
        MessageBox(e);
        return;
    }
    else
    {
        AfxMessageBox(_T("成功!"));
        mysql_query(&m_sqlCon, "SET NAMES ‘GB2312‘");//解決從資料庫中讀取資料後漢字亂碼顯示的問題  也可以是UTF-8

        CString name, id, student_name, student_id, student_major;
        //LPSTR sql = (LPSTR)malloc(200);  兩種格式都可以   我喜歡用sql.Format這種
        CString sql;
        GetDlgItemText(IDC_EDIT1, name);
        GetDlgItemText(IDC_EDIT2, id);
        
        sql.Format(TEXT("select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;"), id, name);
        //sprintf(sql, "select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;", id1, name1);
        AfxMessageBox(sql);//看看SQL語句
        mysql_query(&m_sqlCon, sql);

        MYSQL_RES *res;//定義擷取結果集
        MYSQL_ROW row;//擷取結果集中行資料

        res = mysql_store_result(&m_sqlCon);//取得查詢結果,儲存查詢到的資料到res   
        int num = 0;
        //這個函數每次只能擷取一行資料  不過每次擷取完res指標會後移  所以while迴圈就可以不斷的擷取下面的資料  不過要注意儲存問題
        if (row = mysql_fetch_row(res))
        {
            CString num1 = row[0], num2 = row[1], num3 = row[2];
            student_name = num1;
            student_id = num2;
            student_major = num3;
            SetDlgItemText(IDC_EDIT3, student_name);
            SetDlgItemText(IDC_EDIT4, student_id);
            SetDlgItemText(IDC_EDIT5, student_major);
        }
        else
        {
            CString retu(_T("輸入資訊有誤!"));
            SetDlgItemText(IDC_EDIT3, retu);
        }
    }

    
    
}

好吧  一下上代碼 可能有點亂 或者難以理解     那我們一個一個來看:

        MYSQL m_sqlCon;mysql_init(&m_sqlCon);        

 這個就是 建立一個MYSQL的執行個體對象   然後對他進行初始化      還有其他寫法:

    MYSQL *sock;      sock=mysql_init(0);  

都是差不多的意思。

 

下面就是串連資料庫和判斷:           // localhost:伺服器 root/123456為帳號密碼 testa為資料庫名 3306為連接埠      &m_sqlCon這個就不用說了吧

!!!注意了整個項目  我用的都是 多位元組   需要在自己項目屬性那裡更改    沒有多位元組庫 的可以 去網上下載一個  安裝到VS裡

if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0)){AfxMessageBox(_T("訪問資料庫失敗!"));CString e = mysql_error(&m_sqlCon);//需要將項目屬性中字元集修改為“使用多位元組字元集”或“未設定”  MessageBox(e);return;}else{AfxMessageBox(_T("成功!"));mysql_query(&m_sqlCon, "SET NAMES ‘GB2312‘");//解決從資料庫中讀取資料後漢字亂碼顯示的問題  也可以是UTF-8        }    

 

好了   上面這些就是 串連資料庫的 簡單步驟了 。接下來我們來一個小項目玩玩。。。。。

 

 

第三步 :

上面這個就是一個簡單的實現 從 MFC  到資料庫的   查詢學生資訊的小介面。

下面 就是我資料庫表格 users 放在 一個testa 的資料庫裡面      如果資料庫安裝不會的可以參照我的另外一篇安裝資料庫的部落格http://www.cnblogs.com/DOMLX/p/8094659.html

 

看代碼解釋:

CString name, id, student_name, student_id, student_major;
        //LPSTR sql = (LPSTR)malloc(200);  兩種格式都可以   我喜歡用sql.Format這種
        CString sql;
        GetDlgItemText(IDC_EDIT1, name);
        GetDlgItemText(IDC_EDIT2, id);
        
        sql.Format(TEXT("select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;"), id, name);
        //sprintf(sql, "select student_name,student_id,student_majo from users where father_id=‘%s‘and father_name=‘%s‘;", id1, name1);
        AfxMessageBox(sql);//看看SQL語句
        mysql_query(&m_sqlCon, sql);

        MYSQL_RES *res;//定義擷取結果集
        MYSQL_ROW row;//擷取結果集中行資料

        res = mysql_store_result(&m_sqlCon);//取得查詢結果,儲存查詢到的資料到res   
        int num = 0;
        //這個函數每次只能擷取一行資料返回的是個行數組  不過每次擷取完res指標會後移  所以while迴圈就可以不斷的擷取下面的資料  不過要注意儲存問題
        if (row = mysql_fetch_row(res))
        {
            CString num1 = row[0], num2 = row[1], num3 = row[2];//將數組中的資料存放區
            student_name = num1;
            student_id = num2;
            student_major = num3;
            SetDlgItemText(IDC_EDIT3, student_name);//將資料都顯示到對話方塊中的控制項中去
            SetDlgItemText(IDC_EDIT4, student_id);
            SetDlgItemText(IDC_EDIT5, student_major);
        }
        else
        {
            CString retu(_T("輸入資訊有誤!"));
            SetDlgItemText(IDC_EDIT3, retu);
        }

完成上面這些     加上你的資料庫已經開啟  並且 建立好了 表 和存入了資料 就可以開始進行查詢了。

 

 

 

 

 

 

 

      

基於C++ MFC 串連資料庫 小應用 小項目淺析展示

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.