`

C++数据库操作并生成ini文件。

 
阅读更多

我最近在学习C++,刚学了半个月吧,带我的导师就开始让我写一个利用c++来开发个工具,这可难坏我了,起初以为根本弄不出来。但是经过不停的修改,导师的带领最终还是弄出来了。明白做技术的在不懈的努力下,肯定会把结果弄出来的。

这是一个头文件,有实现的





下面是实现文件。#include "ModularDB.h"


上边的两个文件主要实现了数据库驱动的加载还有就是连接。下面的主要是数据库操作的一些基本方法。


下面是实现文件。



上边的两个文件主要是数据库操作的基本类和方法。

下边主要是实体类



下面就是实现类了。
// createini.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "createini.h"
#include "..\..\Database\ModularDB.h"
#include <iostream>
#include<fstream>
using namespace std;


////////////从数据库中取数据,将其放到vector<data> 中。
vector<data> GetData::getdata()
{
CADOAccessor*l_pAccessor = NULL;
_RecordsetPtrl_pRecordset = NULL;
sInfoDBl_sDB;


l_pAccessor = OpenDB("E:/2011年06月全省版本/Config/Config(1).mdb");
ASSERT(l_pAccessor);
CStringl_strSQL = _T("");
l_strSQL.Format("SELECT CommandID,HandsetNo,ReturnCode,Explain,List FROM ResponseData order by CommandID");
l_pRecordset = l_pAccessor->GetRecordsetEx(l_strSQL);
ASSERT(l_pRecordset);
vector<data> vtrList;
//map<string, vector<data>> l_mapData;
while(!l_pRecordset->adoEOF)
{
//vector<data> vtrList;

variant_tl_vtValue;

data d;
l_vtValue = l_pRecordset->GetCollect("CommandID");
VariantT2string(l_vtValue, d.commandID);

l_vtValue = l_pRecordset->GetCollect("HandsetNo");
VariantT2string(l_vtValue, d.handSetNO);

l_vtValue = l_pRecordset->GetCollect("ReturnCode");
VariantT2string(l_vtValue, d.returnCode);

l_vtValue = l_pRecordset->GetCollect("Explain");
VariantT2string(l_vtValue, d.explain);

l_vtValue = l_pRecordset->GetCollect("List");
VariantT2string(l_vtValue, d.list);

vtrList.push_back(d);

l_pRecordset->MoveNext();

//l_mapData[d.commandID] = vtrList;
}


return vtrList;

}

///***
//取出数据,讲数据放入生成ini文件中。
//先取出每个对象d,然后对commandID判断,如果相同则放入同一个文件
// 如果不相同,则重新生成一个ini文件中
int GetData:: makeini(vector<data> s_data)
{

string s_commandid;
string s_handSetNO;
string s_explain;
string s_returncode;
string s_list;

for(vector<data> ::iterator iter=s_data.begin();iter!=s_data.end();++iter)
{
s_commandid=(*iter).commandID;
s_handSetNO=(*iter).handSetNO;
s_returncode=(*iter).returnCode;
s_explain=(*iter).explain;
s_list=(*iter).list;
static string temp;
if(temp==s_commandid)
{

string l_strFile ="e:\\file\\";
string t_strFile=".ini";
l_strFile+= temp;
//char* path="e:\\1.ini";

//t_strFile+=l_strFile;
l_strFile+=t_strFile; ///e:\file\0100.ini

char* path=(char*)l_strFile.c_str();
//char* path = "E:\\file\\1.ini"; // 你要创建文件的路径
ofstream fout(path,ios::app | ios::out);
//fout.seekp(ios::end);
if(fout)
{
fout<<s_handSetNO<<"="<<s_returncode<<"~"<<s_explain<<";"<<s_list<<endl;
fout.close();
}
}
else
{
temp=s_commandid;
string l_strFile ="e:\\file\\";
string t_strFile=".ini";
l_strFile+= (string)(*iter).commandID;
//char* path="e:\\1.ini";

//t_strFile+=l_strFile;
l_strFile+=t_strFile; ///e:\file\0100.ini

char* path=(char*)l_strFile.c_str();
//char* path = "E:\\file\\1.ini"; // 你要创建文件的路径
ofstream fout(path);


if(fout)
{
fout<<s_handSetNO<<"="<<s_returncode<<"~"<<s_explain<<";"<<s_list<<endl;
fout.close();

}
}
}

return 0;
}

int GetData::VariantT2string(variant_t p_vtValue, string& p_strValue)
{
if(VT_BSTR != p_vtValue.vt)
{
p_strValue.clear();
return 1;
}
CStringl_strValue = p_vtValue;
p_strValue = l_strValue.GetBuffer();
return 0;
}

CADOAccessor* GetData::OpenDB(CString p_strPathDB)
{
intl_iReturn = 0;
CADOAccessor*l_pAccessor = NULL;
try
{
l_pAccessor = reinterpret_cast<CADOAccessor*>(CModularDB::GetInstance()->CreateAccessor());
ASSERT(l_pAccessor);
CString l_strFileDB = _T("");
//l_strFileDB.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s..\..\Config\Config.mdb");
l_strFileDB.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s", p_strPathDB);
if(0 != l_pAccessor->OpenDataBase(l_strFileDB))
{
l_iReturn = 1;
throw l_iReturn;
}
}
catch(...)
{
if(NULL != l_pAccessor)
{
CModularDB::GetInstance()->FreeAccessor(l_pAccessor);
l_pAccessor = NULL;
}
}
return l_pAccessor;
}

int GetData::OperateDB(sInfoDB& p_sDB)
{
try
{
CStringl_strDB = _T("");
l_strDB.Format("%s/%s", this->m_strPathApp.GetBuffer(), p_sDB.strDB.GetBuffer());
p_sDB.pAccessor = OpenDB(l_strDB);
p_sDB.pRecordset = p_sDB.pAccessor->GetRecordsetEx(p_sDB.strSQL);
}
catch(...)
{
return -1;
}
return 0;
}

void GetData::FreeDB(sInfoDB& p_sDB)
{
if(NULL != p_sDB.pAccessor)
{
CModularDB::GetInstance()->FreeAccessor(p_sDB.pAccessor);
p_sDB.pAccessor = NULL;
}
}


由于本项目是在一个mfc工程里建的,然后直接就将调用的方法放到了createini2Dlg.cpp内了。

// TODO: 在此添加额外的初始化代码***************************************?//华丽的分割线。
GetData data;
data.makeini(data.getdata());


主要是这些了。

下面主要是讲解一下改程序 主要运行过程吧。首先在入口处直接调用 类GetData内部的方法,既makeini方法,其主要作用就是取出数据,讲数据放入生成ini文件中。
//先取出每个对象d,然后对commandID判断,如果相同则放入同一个文件
// 如果不相同,则重新生成一个ini文件中

然后起参数就是getData方法了,他返回了数据库中的所有的记录。

////////////从数据库中取数据,将其放到vector<data> 中。
vector<data> GetData::getdata()

getdata()当然在调用其他所有的数据库中的类。

分享到:
评论

相关推荐

    IEC61850数据库定义说明.,iec61000标准中文版,C,C++

    使用了 61850标准后,屏柜、设备等信息可以通过 SCL 文件来自动创建,屏柜、设备以及配置信息可以自动生成,简化了建库过程。以下以PSL621D 为例,详细说明了如何通过 SCL 文件定义参数数据库。

    C++ QT5 电子书教程

    1.6 INI文件写入操作 65 1.7 INI文件读取操作 68 1.8创建XML文件 71 1.9读取XML文件 72 第六章 图形图像操作 1.1绘制文字 75 1.2绘制线条 75 1.3绘制椭圆 77 1.4显示静态图像 78 1.5显示动态图像 78 1.6图片水平移动...

    C++ qt5 电子版教程

    1.6 INI文件写入操作 65 1.7 INI文件读取操作 68 1.8创建XML文件 71 1.9读取XML文件 72 第六章 图形图像操作 1.1绘制文字 75 1.2绘制线条 75 1.3绘制椭圆 77 1.4显示静态图像 78 1.5显示动态图像 78 1.6图片水平移动...

    Visual C++2010开发权威指南(共三部分).part1.rar

    12.3 .ini文件读写操作 500 12.4 注册表读写操作 502 12.4.1 注册表简介 502 12.4.2 注册表API 504 12.4.3 访问并修改注册表 507 12.5 小结 509 第13章 Visual C++ 2010 MFC数据库开发 510 13.1 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例140 提取指定文件夹目录到INI文件 5.3 与文件目录相关的命令操作 实例141 删除文件目录 实例142 重命名文件目录 5.4 文件、文件夹的复制和移动 实例143 批量移动文件 实例144 网络文件夹复制 实例145 ...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例140 提取指定文件夹目录到INI文件   5.3 与文件目录相关的命令操作   cc实例141 删除文件目录   cc实例142 重命名文件目录   5.4 文件.c文件夹的复制和移动   cc实例143 批量移动文件   ...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    cc实例137 清空回收站 5.2 查找文件 cc实例138 搜索文件 cc实例139 检查文件是否存在 cc实例140 提取指定文件夹目录到INI文件 5.3 与文件目录相关的命令操作 cc实例141 删除文件目录 cc实例142 ...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例140 提取指定文件夹目录到INI文件   5.3 与文件目录相关的命令操作   cc实例141 删除文件目录   cc实例142 重命名文件目录   5.4 文件.c文件夹的复制和移动   cc实例143 批量移动文件   ...

    eGameServerDemo:一个用 C++ 编写的简单游戏服务器演示

    数据库1)数据库使用MySql引擎2)在运行项目前,需先将mysql表结构导入,具体导入方法在 database 目录下3)程序运行时,运行目录下会自动生成Setting.ini文件,Mysql的连接参数,如用户名、密码,在ini文件中配置4...

    vc++ 开发实例源码包

    ini文件的类适合VC使用 如题。 Inline Hook(ring3) 简单源码 代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例140 提取指定文件夹目录到INI文件 5.3 与文件目录相关的命令操作 实例141 删除文件目录 实例142 重命名文件目录 5.4 文件、文件夹的复制和移动 实例143 批量移动文件 实例144 网络文件夹复制 实例145 ...

    网管教程 从入门到精通软件篇.txt

    CIN:OS/2改变控制文件用于跟踪INI文件中的变化 CLASS:Java类文件 CLP:Windows 剪贴板文件 CLL:Crick Software Clicker文件 CLS:Visual Basic类文件 CMD:Windows NT,OS/2的命令文件;DOS CD/M命令文件;...

    vc++ 应用源码包_6

    VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 一个视频捕捉类对摄像头的操作。 VC+++暴风影音(Media+Player+Classic)源码 ...

    毕设新项目-基于C++开发的校医院远程诊断系统源码+项目使用说明.zip

    在安装目录中新建一个ini文件,配置端口(3306)、连接数等等 在bin目录下以管理员的身份打开控制窗口,cmd。输入:mysqld --initialize --console, 初始化,初始化之后,会显示本地主机localhost,管理员root,...

    VISUAL C++实效编程280例

    8.20 实例176:获取INI文件指定段的全部键名和键值 第9章 打印 9.1 实例177:通过打印对话框 …… 第10章 多线程 第11章 网络 第12章 ADO数据库 第13章 动态链接库 第14章 系统 第15章 设备管理 第16章 数据类型及...

    vc++ 应用源码包_1

    VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 一个视频捕捉类对摄像头的操作。 VC+++暴风影音(Media+Player+Classic)源码 ...

    vc++ 应用源码包_2

    VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 一个视频捕捉类对摄像头的操作。 VC+++暴风影音(Media+Player+Classic)源码 ...

    vc++ 应用源码包_5

    VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 一个视频捕捉类对摄像头的操作。 VC+++暴风影音(Media+Player+Classic)源码 ...

Global site tag (gtag.js) - Google Analytics