win32控制台连接ACCESS数据库问题

jianglei250979630 2011-01-02 10:38:57
小弟做一个win32 简单用ADO调用ACCESS里面的东西 我编译的时候通过了 但是运行的时候我有一些问题请教各位大虾们
先附上源码:
#include <cstdio>
#include <iostream>
//由于引入ADO库文件时候,会产生警告 4146,但这个警告是没关系的,所以使用下一句代码屏蔽它
#pragma warning(disable: 4146)

//引入ADO库文件 注意C:\Program Files\Common Files\System\ado\msado15.dll这是指系统盘下,
//如果你的系统盘是D盘的话 那么应该是D:\Program Files\Common Files\System\ado\msado15.dll
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")

using namespace std;
_ConnectionPtr m_pCon; //申明Connection指针
_RecordsetPtr m_pRec; //申明Recordset指针

void Initialize(); //初始化资源操作
void ReadingDB(); //读取数据库操作
void AddDB(); //增加数据操作

void HandingDB(); //数据处理操作
int main(int argc, char* argv[]);//主程序处理程序

int main(int argc, char* argv[])
{
Initialize(); //初始化

HandingDB(); //处理函数



return 0;
}


//初始化
void Initialize()
{
::CoInitialize(NULL); //初始化OLE/COM库环境

//****************************************************************************
// _ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,
// 如一个存储过程。

// _ConnectionPtr m_pCon(__uuidof(Connection));
m_pCon.CreateInstance(__uuidof(Connection));
//*****************************************************************************

//****************************************************************************
//_RecordsetPtr是一个记录集对象。与以上两种对象相比它对记录集提供了更多的控制功能,
// 如记录锁定、游标控制等

// _RecordsetPtr m_pRec(__uuidof(Recordset));
m_pRec.CreateInstance(__uuidof(Recordset));
//*****************************************************************************

try
{
//连接数据库
m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=access.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
cout<<e.ErrorMessage(); //输出错误信息
}
try
{
m_pRec->Open("SELECT * FROM Lib",
_variant_t((IDispatch*)m_pCon,true),
adOpenStatic,
adLockOptimistic,
adCmdText);
//adOpenStatic: 静态 adOpenDynamic:动态 adLockOptimistic乐观封锁法 adCmdText:文本查询语句
}
catch(_com_error e)
{
cout<<e.ErrorMessage(); //输出错误信息
}
}

//读取数据库
void ReadingDB()
{

cout<<"\nNumber Name age address tel\n";
m_pRec->MoveFirst();
while(!m_pRec->adoEOF)
{
cout<<(_bstr_t)(m_pRec->GetCollect("Number"));
cout<<" ";
cout<<(_bstr_t)(m_pRec->GetCollect("Name"));
cout<<" ";
cout<<(_bstr_t)(m_pRec->GetCollect("Age"));
cout<<" ";
cout<<(_bstr_t)(m_pRec->GetCollect("Address"));
cout<<" ";
cout<<(_bstr_t)(m_pRec->GetCollect("Tel"));
cout<<"\n";
m_pRec->MoveNext();
}
m_pRec->MoveFirst();
}


//增加数据
void AddDB()
{

char m_Tel[20],m_Number[20],m_Age[20],m_Name[20],m_Address[20];
bool m_flag=true; //判断增加操作是否成功的标志

cout<<"请输入要增加的Number\n";
scanf("%c",&m_Number);

cout<<"请输入要增加的Name\n";
scanf("%c",&m_Name);

cout<<"请输入要增加的Age\n";
scanf("%c",&m_Age);

cout<<"请输入要增加的Address\n";
scanf("%c",m_Address);

cout<<"请输入要增加的Tel\n";
scanf("%c",&m_Tel);

try{
//增加数据到数据库操作
m_pRec->AddNew();
m_pRec->PutCollect("Number", atol(m_Number));
m_pRec->PutCollect("Name", _variant_t(m_Name));
m_pRec->PutCollect("Age", atol(m_Age));
m_pRec->PutCollect("Address", _variant_t(m_Address));
m_pRec->PutCollect("Tel", atol(m_Tel));

m_pRec->Update();
}
catch(_com_error e)
{
m_flag=false;
cout<<e.ErrorMessage();
}

if(m_flag) //判断操作成功的输出语句
cout<<"增加操作成功\n";
else
cout<<"增加操作失败\n";
ReadingDB(); //从新读取数据库,并且显示
}

//处理函数
void HandingDB()
{
ReadingDB(); //读取数据库,并且显示
char m_str[10],m_char;

while(1)
{
cout<<"\n操作输入:\nQ 退出: A 增加数据\n";

cin>>m_str;
sscanf( m_str, "%c", &m_char ); //将m_str转化为字符,并保存在m_char中

if('Q'==m_char||'q'==m_char)
break; //退出程序

if('A'==m_char||'a'==m_char)
AddDB(); //增加数据
}
}
调试的时候出***。exe的 0x75619617 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0022f9c0 处的 _com_error。
请问有什么解决方法否
...全文
187 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
定时自动发送邮件服务使用说明 该软件运行环境需要.Net 3.5支持,Win7系统上可以直接运行. 主要功能可以定时自动发送邮件,发送程序做成服务形式,用户无需登录, 只要电脑是开启状态,就会自动执行发送邮件. 包含的文件, 1.AutoSendMail.exe --设置程序 2.AutoSendMail_Log.txt --存放日志的文本文件. 可自动生成 3.AutoSendMail_Setting.xml --配置文件 4.AutoSendMailService.exe --服务程序 5.InstallUtil.exe --微软的安装服务必须程序 6.tasks.mdb --Access数据库文件,用于存放邮箱内容. 可更改文件 7.安装服务.bat 8.使用说明.txt 9.卸载服务.bat 安装步骤: 第一步:安装服务 运行“安装服务.bat”文件。(需要管理员权限) 第二步:修改配置文件 修改好配置文件AutoSendMail_Setting.xml。确保Access数据库连接正确,每个任务的发送时点,和邮件信息。 每次修改配置文件必需重新启动服务才生效。 第三步:启动服务 a.从服务管理控制台启动服务,运行services.msc命令打开控制台。 b.通过设置程序启动服务。(需要管理员权限) 如果删除服务,则运行“卸载服务.bat”。 接口定义: 每个任务需要在指定的Access数据库里设置一个视图或表,用于存放邮件信息, 字段格式: 第一字段:ID 自动编号 第二字段:收件人 文本类型 第三字段:抄送人 文本类型 第四字段:主题 文本类型 第五字段:内容 备注类型 第六字段:发送次数 数字类型 备注:程序通过ID查找记录,来更新发送次数的值。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧