ADO 读取 ACCESS
#pragma once
#include <vector>
// 加入ADO支持库,
#import "C:\Program Files\Common Files\System\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF") template<typename stDBDATA>
class CADO
{
public:
CADO();
virtual ~CADO();
public:
static void dump_com_error(_com_error &e);
bool Init();
bool Start();
void Uninit();
public:
void OnWrite(char* name, int age);
void OnRead();
void OnDelete();
void OnModify();
void OnExcute(); private: _ConnectionPtr m_pConnection; _CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;
_RecordsetPtr m_pRecordset1;
char* m_strCommand; }; template<class stDBDATA>
CADO<stDBDATA>::CADO()
{
Init();
} template<class stDBDATA>
CADO<stDBDATA>::~CADO()
{
Uninit();
} template<class stDBDATA>
void CADO<stDBDATA>::dump_com_error(_com_error &e)
{
char ErrorStr[MAX_PATH]; _bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
sprintf_s(ErrorStr, "\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n",
e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription);
printf(ErrorStr);
} template<class stDBDATA>
bool CADO<stDBDATA>::Init()
{
// 初始化COM,创建ADO连接等操作
int S_Result = OleInitialize(NULL);
HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));
/*HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");*/
if(FAILED(hr))
{
printf("m_pConnection.CreateInstance调用失败\n");
return false;
}
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);
}
catch(_com_error& e)
{
dump_com_error(e);
return false;
} return true;
} template<class stDBDATA>
bool CADO<stDBDATA>::Start()
{
// 使用ADO创建数据库记录集
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset->Open("SELECT * FROM USERTABLE", // 查询User表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error& e)
{
dump_com_error(e);
return false;
} return true;
} template<class stDBDATA>
void CADO<stDBDATA>::Uninit()
{
// 关闭ADO连接状态
if(m_pConnection->State)
{
m_pConnection->Close();
m_pConnection= NULL;
} if(m_pRecordset->State)
{
m_pRecordset->Close();
m_pRecordset.Release();
m_pRecordset = NULL;
}
} template<class stDBDATA>
void CADO<stDBDATA>::OnWrite(char* name, int age)
{
long age_l = age;
try
{
// 写入各字段值
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Name", LPSTR(name));
m_pRecordset->PutCollect("Age", age_l);
m_pRecordset->Update();
}
catch(_com_error& e)
{
dump_com_error(e);
}
} template<class stDBDATA>
void CADO<stDBDATA>::OnRead()
{
_variant_t var; char strName[MAX_PATH];
int age; try
{
if(!m_pRecordset->BOF)
{
m_pRecordset->MoveFirst();
}
else
{
printf("表内数据为空\n");
return;
} while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("Name");
if(var.vt != VT_NULL)
{
strcpy_s(strName, _bstr_t(var));
}
var = m_pRecordset->GetCollect("Age");
if(var.vt != VT_NULL)
{
age = atol(_bstr_t(var));
} stDBDATA data(strName, age);
data.print(); m_pRecordset->MoveNext();
}
}
catch(_com_error& e)
{
dump_com_error(e);
}
} template<class stDBDATA>
void CADO<stDBDATA>::OnDelete()
{
try
{
m_pRecordset->MovePrevious();
// 删除当前行记录
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Update(); }
catch(_com_error& e)
{
dump_com_error(e);
}
} template<class stDBDATA>
void CADO<stDBDATA>::OnModify()
{
char m_Name[MAX_PATH] = "fffff";
long m_Age = ; // 修改当前记录的字段值
try
{
m_pRecordset->PutCollect("Name", _variant_t(m_Name));
m_pRecordset->PutCollect("Age", m_Age);
m_pRecordset->Update();
}
catch(_com_error& e)
{
dump_com_error(e);
}
} template<class stDBDATA>
void CADO<stDBDATA>::OnExcute()
{
_CommandPtr m_pCommand;
m_strCommand = "delete from USERTABLE where Name = 'fffff'"; m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection; // 将库连接赋于它
m_pCommand->CommandText = _bstr_t((LPCTSTR)m_strCommand); // SQL语句
try
{
// 执行SQL语句,返回记录集,此记录不能做插入操作
// 故为了不和m_pRecordset相冲突, 放入新定义的m_pRecordset1
m_pRecordset1 = m_pCommand->Execute( NULL, NULL, adCmdText);
}
catch(_com_error& e)
{
dump_com_error(e);
}
}
#include "ado.h" struct stDB
{
char name[MAX_PATH];
int age; stDB()
{ } stDB(char* _name, int _age)
{
strcpy_s(name,MAX_PATH, _name);
age = _age;
} void print()
{
printf("Name:%s------Age:%d\n", name, age);
}
}; int main()
{
CADO<stDB> ado;
ado.Start();
ado.OnRead();
ado.OnWrite("q1", );
ado.OnModify();
ado.OnDelete();
ado.OnExcute();
ado.OnRead();
system("pause");
return ;
}
ADO 读取 ACCESS的更多相关文章
- ADO访问Access数据库错误解决心得随笔
最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下. 环境 win7 x86系统: VS2012编译器: Office2010: Access2000~ ...
- c# ADO连接Access 执行Open后程序自动退出
今天利用ADO连接Access数据库的时候遇到了前所未见的问题,Access数据库连接串,OleDbConnection,open的时候,系统就会自动关闭所有调试. 我就很纠结了,这个AccessHe ...
- ADO读取EXCEL
窗体上拖放ADOQuery1,DataSetProvider1,DataSource1,ClientDataSet1,OpenDialog1, ExcelApplication1,ExcelWorkb ...
- java读取ACCESS数据库的简单示例
java读取ACCESS数据库的简单示例 虽然简单,对初学者来说,如果没有一段可以成功执行的代码供参考,还真难调试 先用ACCESS建一个数据库 DB1.MDB,里面有一表"table1&q ...
- PHP使用UTF8编码读取ACCESS的乱码问题解决方案(转)
PHP使用UTF8编码读取ACCESS的乱码问题解决方案 http://it.xwstudy.com/readnews.php?id=627 来源:本站编辑 发布日期:2013-05-27 已有 17 ...
- x64 win64编译环境下ADO链接Access数据库的问题解决
原文链接地址:https://blog.csdn.net/HW140701/article/details/71077579 Win32编译环境下,用ADO数据库连接Access数据库一般都不会报错, ...
- MFC通过ADO操作Access数据库
我在<VC知识库在线杂志>第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读.写Excel表格文件”和“直接通过DAO读.写Access文件”,先后给大家介绍了ODBC和DAO两 ...
- 直接通过ADO操作Access数据库
我在<VC知识库在线杂志>第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读.写Excel表格文件”和“直接通过DAO读.写Access文件”,先后给大家介绍了ODBC和DAO两 ...
- 如何读取Access里的OLE类型的图片
身份证一类读卡器读取的照片信息,保存在Access数据库中一般为OLE型字段,图片为BMP格式,因为是用其读卡器写入的,其数据类型为常二进制数据. 再用报表或EXCEL读取这些图片时,如果将该图片字段 ...
随机推荐
- iOS缓存功能
之前做缓存,没有考虑过这个具体的实现. 移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage. 但是,离线缓存会占用手机存储空间,所 ...
- RGB转YCbCr
从RGB转换成YCbCr // Purpose: // Save RGB->YCC colorspace conversion for reuse, only co ...
- [原创]快速指定SQLDeveloper所使用JDK的方法
就众多的免费SQL开发工具来讲,Oracle出品的SQLDeveloper 还是一个很不错的选择. 看到网上不少的帖子讨论SQL Developer 启动的时候报告找不到Java Home(或JDK) ...
- 在DCOM 中不存在WORD、EXCEL等OFFICE组件
DCOM里面没有与office相关的所有组件解决方法:先简单说下,操作步骤(项目演示完成后,补上图): Run MMC -32 File Add Remove Snap-in Component Se ...
- log4j+mongodb
maven 配置: <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java ...
- 导入excel2007文件问题
基于oledb方式导入excel2007文件时,使用如下链接字符串: string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Sour ...
- vs2010项目使用vs2013编译报错 无法打开包括文件:“winapifamily.h”
我的老项目是vs2010下的项目.最近安装vs2013后,打开sln解决方案,调试运行报错 C:\Program Files (x86)\Windows Kits\8.0\Include\um\win ...
- The prefix "util" for element "util:list" is not bound.
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4. ...
- An invalid form control with name='' is not focusable.
是因为<form></form>里面还有hide()元素的缘故,把隐藏的放在表单外面就好了
- Asp.net上传文件后台通过二进制流发送到其他Url保存
实际情况一般有单独的站点存放静态文件,比如图片.office文档等.A站点的操作需要上传文件到B站点, 下面介绍一种方法通过System.Net.WebClient类的UploadData方法 . u ...