VC++6.0如何连接ACCESS2007?
已经在VC++6.0上写好了工资管理系统,但不知道怎么写连接数据库的代码,求大侠赐教啊,本人比较笨,告诉我QQ,指导下我吧。感谢啊...
已经在VC++6.0上写好了工资管理系统,但不知道怎么写连接数据库的代码,求大侠赐教啊,本人比较笨,告诉我QQ,指导下我吧。感谢啊
展开
5个回答
展开全部
用ADO的方式连接数据库:具体做法如下
1、在工程中导入下面两个文件ADOConn.h和ADOConn.cpp(见后面)
2、在需要调用数据库的CPP文件开始包含头文件 #include "ADOConn.h"(数据库连接的代码已封装到ADOConn.cpp中的OnInitADOConn方法)
3、按照数据库连接-》数据库操作-》断开连接的步骤调用(以从数据库中获取数据为例)
ADOConn m_ADOConn1; // 定义ADOConn类对象
m_ADOConn1.OnInitADOConn(); //连接数据库
CString sql1;
sql1.Format("select top 20 职务,count(职务) as NameCount from tb_holidays group by 职务 order by 'NameCount' desc");
//设置查询语句
m_ADOConn1.m_pRecordset = m_ADOConn1.GetRecordSet((_bstr_t)sql1); //查询
while(!m_ADOConn1.m_pRecordset->adoEOF)
{
CString temp;
//从数据库中取得数据
temp=(char*)(_bstr_t)m_ADOConn1.m_pRecordset->GetCollect("职务");
m_ADOConn1.m_pRecordset->MoveNext(); //将记录集指针移动到下一条记录
}
m_ADOConn1.ExitConnect(); //断开数据库连接
////////////////////////ADOConn.cpp//////////////////////////////////////////////
#include "stdafx.h"
#include "ADOConn.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn::ADOConn()
{
}
ADOConn::~ADOConn()
{
}
BOOL ADOConn::OnInitADOConn()
{
//初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
//创建connection对象
//下面语句等效于:m_pConnection.CreateInstance("ADODB.Connection");
char path[MAX_PATH];
CString strPath;
::GetModuleFileName(NULL,path,MAX_PATH);
strPath=path;
strPath=strPath.Left( strPath.ReverseFind(_T('\\'))+1 );//去掉绝对路径后的PersonManage.exe
strPath = strPath + "PersonManage.mdb";
m_pConnection.CreateInstance(__uuidof(Connection));
// 打开本地Access库student.mdb
CString strname;
//此处为连接Access的连接字符串,用ADO连接SQL也是此模式,不同的就是变化此处的连接字符串
strname.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False;Jet OLEDB:Database Password=123",strPath);
_bstr_t strConnect=strname;
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
CString str =(char*)e.Description();
AfxMessageBox(str);
AfxMessageBox("数据库连接失败,确认数据库PersonManage.mdb是否在当前路径下且密码正确!");
ExitConnect();
return FALSE;
}
return TRUE;
}
void ADOConn::OnInitADOConnSrv(CString server)//初始化远程服务器的数据库访问连接
{
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
//连接数据库,如果connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
//m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset.CreateInstance("ADODB.Recordset");
//取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
e.Description();
}
//返回记录集
return m_pRecordset;
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
_variant_t RecordsAffected;
try
{
//是否已连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
/***********************************************************************
* connection对象的Execute方法说明如下: *
* Execute(_bstr_t CommandText,VARIANT * RecordsAffected,long Options) *
* 其中CommandText是命令字符串,通常是SQL命令 *
* 参数RecordsAffected是操作完成后所影响的行数 *
* 参数Options表示CommandText的类型。 *
* adCmdText-文本命令 *
* adCmdTable-表名 *
* adCmdProc-存储过程 *
* adCmdUnknown-未知 *
***********************************************************************/
m_pConnection->Execute(bstrSQL,NULL,adCmdText); //执行SQL语句
return true;
}
catch(_com_error e)
{
e.Description();
return false;
}
}
void ADOConn::ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
::CoUninitialize();
}
int ADOConn::GetRecordCount()
{
int nCount=0;
try{
m_pRecordset->MoveFirst();
}
catch(...)
{
return 0;
}
if(m_pRecordset->adoEOF)
return 0;
while (!m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
nCount=nCount+1;
}
m_pRecordset->MoveFirst();
return nCount;
}
///////////////////////////////ADOConn.h///////////////////////////////////////
// ADOConn.h: interface for the ADOConn class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ADOCONN_H__B8D01B34_20DA_49AE_9FA1_664D67A28ABD__INCLUDED_)
#define AFX_ADOCONN_H__B8D01B34_20DA_49AE_9FA1_664D67A28ABD__INCLUDED_
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class ADOConn
{
public:
//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针
_RecordsetPtr m_pRecordset;
public:
int GetRecordCount();
ADOConn();
virtual ~ADOConn();
//初始化--连接数据库(本地)
BOOL OnInitADOConn();
//初始化--连接数据库(远程服务器)
void OnInitADOConnSrv(CString server);
//执行查询
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
//执行SQL语句
BOOL ExecuteSQL(_bstr_t bstrSQL);
//断开数据库连接
void ExitConnect();
};
#endif // !defined(AFX_ADOCONN_H__B8D01B34_20DA_49AE_9FA1_664D67A28ABD__INCLUDED_)
我可是花了很长时间回答你这个问题哦,记得给分哦 谢谢
1、在工程中导入下面两个文件ADOConn.h和ADOConn.cpp(见后面)
2、在需要调用数据库的CPP文件开始包含头文件 #include "ADOConn.h"(数据库连接的代码已封装到ADOConn.cpp中的OnInitADOConn方法)
3、按照数据库连接-》数据库操作-》断开连接的步骤调用(以从数据库中获取数据为例)
ADOConn m_ADOConn1; // 定义ADOConn类对象
m_ADOConn1.OnInitADOConn(); //连接数据库
CString sql1;
sql1.Format("select top 20 职务,count(职务) as NameCount from tb_holidays group by 职务 order by 'NameCount' desc");
//设置查询语句
m_ADOConn1.m_pRecordset = m_ADOConn1.GetRecordSet((_bstr_t)sql1); //查询
while(!m_ADOConn1.m_pRecordset->adoEOF)
{
CString temp;
//从数据库中取得数据
temp=(char*)(_bstr_t)m_ADOConn1.m_pRecordset->GetCollect("职务");
m_ADOConn1.m_pRecordset->MoveNext(); //将记录集指针移动到下一条记录
}
m_ADOConn1.ExitConnect(); //断开数据库连接
////////////////////////ADOConn.cpp//////////////////////////////////////////////
#include "stdafx.h"
#include "ADOConn.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn::ADOConn()
{
}
ADOConn::~ADOConn()
{
}
BOOL ADOConn::OnInitADOConn()
{
//初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
//创建connection对象
//下面语句等效于:m_pConnection.CreateInstance("ADODB.Connection");
char path[MAX_PATH];
CString strPath;
::GetModuleFileName(NULL,path,MAX_PATH);
strPath=path;
strPath=strPath.Left( strPath.ReverseFind(_T('\\'))+1 );//去掉绝对路径后的PersonManage.exe
strPath = strPath + "PersonManage.mdb";
m_pConnection.CreateInstance(__uuidof(Connection));
// 打开本地Access库student.mdb
CString strname;
//此处为连接Access的连接字符串,用ADO连接SQL也是此模式,不同的就是变化此处的连接字符串
strname.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False;Jet OLEDB:Database Password=123",strPath);
_bstr_t strConnect=strname;
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
CString str =(char*)e.Description();
AfxMessageBox(str);
AfxMessageBox("数据库连接失败,确认数据库PersonManage.mdb是否在当前路径下且密码正确!");
ExitConnect();
return FALSE;
}
return TRUE;
}
void ADOConn::OnInitADOConnSrv(CString server)//初始化远程服务器的数据库访问连接
{
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
//连接数据库,如果connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
//m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset.CreateInstance("ADODB.Recordset");
//取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
e.Description();
}
//返回记录集
return m_pRecordset;
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
_variant_t RecordsAffected;
try
{
//是否已连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
/***********************************************************************
* connection对象的Execute方法说明如下: *
* Execute(_bstr_t CommandText,VARIANT * RecordsAffected,long Options) *
* 其中CommandText是命令字符串,通常是SQL命令 *
* 参数RecordsAffected是操作完成后所影响的行数 *
* 参数Options表示CommandText的类型。 *
* adCmdText-文本命令 *
* adCmdTable-表名 *
* adCmdProc-存储过程 *
* adCmdUnknown-未知 *
***********************************************************************/
m_pConnection->Execute(bstrSQL,NULL,adCmdText); //执行SQL语句
return true;
}
catch(_com_error e)
{
e.Description();
return false;
}
}
void ADOConn::ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
::CoUninitialize();
}
int ADOConn::GetRecordCount()
{
int nCount=0;
try{
m_pRecordset->MoveFirst();
}
catch(...)
{
return 0;
}
if(m_pRecordset->adoEOF)
return 0;
while (!m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
nCount=nCount+1;
}
m_pRecordset->MoveFirst();
return nCount;
}
///////////////////////////////ADOConn.h///////////////////////////////////////
// ADOConn.h: interface for the ADOConn class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ADOCONN_H__B8D01B34_20DA_49AE_9FA1_664D67A28ABD__INCLUDED_)
#define AFX_ADOCONN_H__B8D01B34_20DA_49AE_9FA1_664D67A28ABD__INCLUDED_
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class ADOConn
{
public:
//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针
_RecordsetPtr m_pRecordset;
public:
int GetRecordCount();
ADOConn();
virtual ~ADOConn();
//初始化--连接数据库(本地)
BOOL OnInitADOConn();
//初始化--连接数据库(远程服务器)
void OnInitADOConnSrv(CString server);
//执行查询
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
//执行SQL语句
BOOL ExecuteSQL(_bstr_t bstrSQL);
//断开数据库连接
void ExitConnect();
};
#endif // !defined(AFX_ADOCONN_H__B8D01B34_20DA_49AE_9FA1_664D67A28ABD__INCLUDED_)
我可是花了很长时间回答你这个问题哦,记得给分哦 谢谢
展开全部
vc++6.0
office 2007 32位(access 2007)
我用的是ado方式连接access数据库,(现在的Win7系统中安装的一般都是32位的Office,因为微软推荐使用32位的Office,兼容性更强,稳定性更好。access文件是.mdb(2003格式,会提示没有jet访问组件) .accdb(2007格式)),因此需要安装AccessDatabaseEngine_X64.exe驱动,安装时会提示先卸载office再安装64位office,然后再安装。可以使用"/passive"命令安装;
操作如下:
打开命令行 输入AccessDatabaseEngine_x64.exe /passive 安装完成。
安装完成后,查看注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths,删除mso.dll(一定做这一步,否则会出现Office Config配置问题,已启动Office就会重新安装Office)
以上准备工作做完,可以开始编码了以下列出关键代码:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\mac.mdb;";
//特别注意这里的连接字符串或者用以下连接字符串(很容易出错,这2个都是可以的,我这个上面浪费很多时间
/*
_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\mac.mdb;";
//_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\mac.mdb;uid=;pwd=;";
*/
pConn->Open(strConnect,"","", adModeUnknown);
pRst=pConn->Execute("select * from macAddress",NULL,adCmdText);
while(!pRst->adoEOF)
{
//((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("mac"));
printf( "%s \n", pRst->GetCollect("mac"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
提示[Microsoft ][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序,很有可能就是驱动已经安装好,但是连接字符串是错误的(如access文件路径)。
office 2007 32位(access 2007)
我用的是ado方式连接access数据库,(现在的Win7系统中安装的一般都是32位的Office,因为微软推荐使用32位的Office,兼容性更强,稳定性更好。access文件是.mdb(2003格式,会提示没有jet访问组件) .accdb(2007格式)),因此需要安装AccessDatabaseEngine_X64.exe驱动,安装时会提示先卸载office再安装64位office,然后再安装。可以使用"/passive"命令安装;
操作如下:
打开命令行 输入AccessDatabaseEngine_x64.exe /passive 安装完成。
安装完成后,查看注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths,删除mso.dll(一定做这一步,否则会出现Office Config配置问题,已启动Office就会重新安装Office)
以上准备工作做完,可以开始编码了以下列出关键代码:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\mac.mdb;";
//特别注意这里的连接字符串或者用以下连接字符串(很容易出错,这2个都是可以的,我这个上面浪费很多时间
/*
_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\mac.mdb;";
//_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\mac.mdb;uid=;pwd=;";
*/
pConn->Open(strConnect,"","", adModeUnknown);
pRst=pConn->Execute("select * from macAddress",NULL,adCmdText);
while(!pRst->adoEOF)
{
//((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("mac"));
printf( "%s \n", pRst->GetCollect("mac"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
提示[Microsoft ][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序,很有可能就是驱动已经安装好,但是连接字符串是错误的(如access文件路径)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string pdffileName = array[2];
if (File.Exists(Server.MapPath(pdffileName)))
{
Query q = Query.GetInstance();
QueryInfo qi = new QueryInfo();
qi.QueryString = "update T_EVIDENCE_USER set T_SUBMIT_FLG=1,T_UPLOAD=@pdffilename,T_SUBMITDATE=@updatedtime,UPDATE_DATE=@updatedtime where T_GAKUSEKI_ID=@studentid";
qi.Add("@pdffile", pdffileName, System.Data.DbType.String);
qi.Add("@updatetime", System.DateTime.Now,System.Data.DbType.DateTime);
qi.Add("@studentid", StudentID, System.Data.DbType.Int32);
q.Execute(qi);
if (File.Exists(Server.MapPath(pdffileName)))
{
Query q = Query.GetInstance();
QueryInfo qi = new QueryInfo();
qi.QueryString = "update T_EVIDENCE_USER set T_SUBMIT_FLG=1,T_UPLOAD=@pdffilename,T_SUBMITDATE=@updatedtime,UPDATE_DATE=@updatedtime where T_GAKUSEKI_ID=@studentid";
qi.Add("@pdffile", pdffileName, System.Data.DbType.String);
qi.Add("@updatetime", System.DateTime.Now,System.Data.DbType.DateTime);
qi.Add("@studentid", StudentID, System.Data.DbType.Int32);
q.Execute(qi);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有现成的库啊,ADO,网上也可以找到。找不到就联系我。。
ADO.h
AdoCommand.h
AdoRecordSet.h
和对应的cpp 就这6个文件
ADO.h
AdoCommand.h
AdoRecordSet.h
和对应的cpp 就这6个文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public class NumberSort {
public static void sort(int[][] root, int[] number){
int[] result = new int[number.length];
for(int i =0;i<number.length;i++){
result[i] = root[i][number[i]];
}
for(int i =0;i<result.length;i++){
for(int j= i;j<result.length-1;j++){
if(result[j]>result[j+1]){
int tmp = result[j];
result[j]=result[j+1];
result[j+1]=result[j];
public static void sort(int[][] root, int[] number){
int[] result = new int[number.length];
for(int i =0;i<number.length;i++){
result[i] = root[i][number[i]];
}
for(int i =0;i<result.length;i++){
for(int j= i;j<result.length-1;j++){
if(result[j]>result[j+1]){
int tmp = result[j];
result[j]=result[j+1];
result[j+1]=result[j];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询