zoukankan      html  css  js  c++  java
  • 简单数据库数据导出工具总结笔记

    简单界面:

      

    1. 左边用ListBox控件,添加一个控件变量m_lb,将数据从数据库导出,然后用m_lb.AddString()添加到ListBox中显示。

      在OnInitDialog()中加入。CDBBase是封装的mysql类,一开始从数据库导出的汉字显示乱码,因为数据库用的utf-8,而程序这边用的gbk,

    后来加了pDBbase->DBexecute("SET NAMES 'GB2312'");显示正确。

    获取ListBox中元素个数用m_lb.GetCount(),返回整数。

    获取ListBox选中项用m_lb.GetCursel(),返回序号,从0开始,返回-1表示未选中。

    // TODO: 在此添加额外的初始化代码
        pDBbase = new CDBBase();
        int nRet = pDBbase->DBconnect(SSF_DB_IP,SSF_DB_USER,SSF_DB_PWD,SSF_DB_NAME,NULL,SSF_DB_PORT);
        if (nRet == -1)
        {
            MessageBox("数据库连接失败!");
            return 0;
        }
        DB_RESULT result;
        DB_ROW    row;
        char sql[512];
        memset(sql, 0, SQL_MAX_SIZE);
        sprintf(sql, "select name from hosts where type = 1 
    ");
                
        //设置字符集
        pDBbase->DBexecute("SET NAMES 'GB2312'");
    
        result = pDBbase->DBselectN(sql, 100);
        int nCount = 0;
        while (result != NULL)
        {
            if(NULL != (row = pDBbase->DBfetch(result)))
            {
                if(row[0] != NULL)
                {
                    ItemName[nCount++] = row[0];
                    m_lb.AddString(row[0]);
                }    
            }
            else
            {
                break;
            }
        }
        DBfree_result(result);

    2. 日期控件(Date Time Picker)的使用。

      首先给两个日期控件添加两个控件变量,m_data和m_data_end。再定义两个CTime类变量,用来保存从控件上读取的时间。

          CTime time_begin,time_end;

          m_data.GetTime(time_begin);

      m_data_end.GetTime(time_end);

      这样,就获取了控件时间保存在两个CTime对象中。这里用到的是从1970年1月1日至今的秒数,用CTime类的成员方法GetTime();

      long long nTime_begin = time_begin.GetTime();
      long long nTime_end = time_end.GetTime();

      然后我们需要的是这一天的零点的秒数,所以需要减去当前时间秒数,

      long long todaytime = time_begin.GetHour()*3600 + time_begin.GetMinute()*60+time_begin.GetSecond();

         比如,如果选择的是2014/4/29日和2014/4/30日,那么开始的时刻为nTime_begin-todaytime,结束时刻为nTime_end-todaytime;

      另从数据库中导出的数据中时间戳是一个从1970年1月1日至今的秒数,要将它转化为正常年月日时间显示。

          用localtime函数将long long 型转化为tm 型,输出时"?:"用来控制小于10时的前面补0。

    __int64 tt;
    tt = atoi(row[0]);
    tm * tmpoint = localtime(&tt);
    OutputFile<<tmpoint->tm_year+1900<<"/"
    <<tmpoint->tm_mon+1<<"/"<<tmpoint->tm_mday<<" "
    <<(tmpoint->tm_hour <= 9 ? "0":"")<<tmpoint->tm_hour<<":"
    <<(tmpoint->tm_min  <= 9 ? "0":"")<<tmpoint->tm_min<<":"
    <<(tmpoint->tm_sec  <= 9 ? "0":"")<<tmpoint->tm_sec<<"	";

    3. 保存窗口的使用。

        CFileDialog对象构造函数参数中,第一个参数TRUE表示是“打开”对话框,FALSE表示为“另存为”对话框。第五个参数(LPCTSTR)_TEXT("*.txt")表示文件类型过滤器里只有"*.txt"类型。

         CString FilePathName;
            CFileDialog dlg(FALSE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
                "txt", 
                NULL,
                OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
                (LPCTSTR)_TEXT("*.txt"),
                NULL);
            if(dlg.DoModal()==IDOK)
            {
                FilePathName=dlg.GetPathName(); //文件名保存在了FilePathName里
            }
            else
            {
                return;
            }

    4. 写入txt文件。

        ofstream OutputFile。

      用open()函数打开文件,操作完后要用close()函数关闭文件。  

      打开: OutputFile.open(FilePathName);

          写入:OutputFile<<"*********************************************** ";

          关闭:  OutputFile.close();

    5. MYSQL封装类头文件

    #pragma once
    #ifndef  SSF_DBBASE_H
    #define SSF_DBBASE_H
    
    //#include "common.h"
    #include <WinSock.h>
    
    #define HAVE_MYSQL
    
    #define    SSF_DB_OK    (0)
    #define    SSF_DB_FAIL    (-1)
    #define    SSF_DB_DOWN    (-2)
    
    #define SSF_DB_IP     "localhost"
    #define SSF_DB_USER   "***"
    #define SSF_DB_PWD    "***"
    #define SSF_DB_NAME   "***"
    #define SSF_DB_PORT   3306
    
    #define SSF_MAX_SQL_SIZE    262144    /* 256KB */
    #define SQL_MAX_SIZE        512
    
    #ifdef HAVE_MYSQL
    
    #include "mysql.h"
    #include "errmsg.h"
    #include "mysqld_error.h"
    
    #define    DB_HANDLE    MYSQL
    #define    DB_RESULT    MYSQL_RES *
    #define    DBfree_result    mysql_free_result
    #define DB_ROW        MYSQL_ROW
    #endif /* HAVE_MYSQL */
    
    
    class CDBBase
    {
    public:
        CDBBase(void);
        ~CDBBase(void);
    
        int         DBexecute(const char *fmt);
        DB_RESULT    DBselectN(const char *query, const int n);
        DB_ROW        DBfetch(DB_RESULT result);
        void        DBclose(void);
        int            DBconnect(const char *host, const char *user, const char *password, const char *dbname, const char *dbsocket,const int port);
        void        DBrollback(void);
        int         DBselectCount(const char *tableName, const char* condition);
    private:
    
    
    protected:
    
    public:
        MYSQL  *pConn;
    
    };
    
    #endif

      

  • 相关阅读:
    GCC内置函数
    父类子类的拷贝构造与赋值
    外传三 动态内存申请的结果
    外传二 函数的异常规格说明
    外传一 异常处理深度解析
    第69课 技巧,自定义内存管理
    第68课 拾遗,令人迷惑的写法
    第67课 经典问题解析五
    第66课 C++中的类型识别
    第65课 C++中的异常处理(下)
  • 原文地址:https://www.cnblogs.com/fwst/p/3699250.html
Copyright © 2011-2022 走看看