| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1508 人关注过本帖
标题:win32控制台连接ACCESS数据库问题
取消只看楼主 加入收藏
jay11223344
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-1-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:0 
win32控制台连接ACCESS数据库问题
小弟做一个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。
 请问有什么解决方法否
搜索更多相关主题的帖子: 数据库 控制台 
2011-01-02 23:09
快速回复:win32控制台连接ACCESS数据库问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022769 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved