您的位置:首页 > 数据库

简单数据库数据导出工具总结笔记

2014-04-29 15:04 330 查看
简单界面:

  


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 \n");

//设置字符集
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<<"\t";


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<<"***********************************************\n";

关闭: 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


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: