解决方案 »
- TCP/IP连接失败,10060错误。本来一直是好的。
- MFC VS2008 如何将创建的菜单与主程序链接
- 急,如何向CTreeCtrl控件发送消息到子节点
- webbrowser控件如何过滤代码后显示内容
- 菜鸟救助!我很郁闷
- 大家帮帮忙,看看我这个水平在北京能拿多少?谢谢了
- 如何填充一个任意多边形啊?急!!!!!!!!!!!!
- 谁知道,Ctabctl怎么用?
- tmd xp不能用了 只能用linux了(哈哈)
- 谁知道进程同步的函数是什么?
- m_file.ReadString(sz_text) 后 sz_text.Mid(1,14);为什么总是运行错误
- m_pSet->IsOpen() 这一句也会出错?帮帮我!!!
//ADO 操作数据库
1.
//头文件StdAfx.h要添加的内容 下面两行写在同一行
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")
rename("BOF","FirstOfFile")
#include "ICRSINT.H"2.在App类中申明变量:
_ConnectionPtr m_pCon; //连接对象3.
//数据库的初始化函数类似如下:
//在App类的 InitInstance() 开始处调用此函数
void CXXApp::InitDB()
{
//连接数据库
//初始化环境
::CoInitialize(NULL); HRESULT hr;
try
{
//创建Connection对象
hr= m_pCon.CreateInstance("ADODB.Connection"); //注:oracle 操作更新数据库要加语句: (9i好像不需要,不清楚,还需验证)
//m_pCon->CursorLocation=adUseClient; if(SUCCEEDED(hr))
{
//连接数据库
CString strLinkStr="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial
Catalog=DBJFDB;password='c00202';Data Source=NORSSION-SERVER";
hr = m_pCon->Open((_bstr_t)strLinkStr,"","",adModeUnknown); //第一个参数也可以直接用数据源的名称,第
//二个参数为用户名,第三个为密码。当采用数据源的方式,用户名和密码必填(Access空密码除外)
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
}4.
//数据库的退出处理:
int CXXApp::ExitInstance()
{
//数据库的释放
if(m_pCon->State)
{
m_pCon->Close();
m_pCon= NULL;
}
return CWinApp::ExitInstance();
}5.
//在其他类中使用时,先要声明变量:
//文件的开头处要申明变量: extern CXXApp theApp;
//CXXApp 为应用程序类名 改成相应自己的内容6.
//数据库操作(1)添加: // 连接对记录集对象
_RecordsetPtr m_pRs;
m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口 try
{
CString strRecordSet;
strRecordSet="SELECT * FROM TABLE "; // TABLE为表名
m_pRs->Open((_bstr_t)strRecordSet,
variant_t((IDispatch*)theApp.m_pCon,true),
adOpenDynamic,
adLockOptimistic,
adCmdText); // 写入各字段值
_variant_t vTemp;
m_pRs->AddNew();
vTemp.SetString("13002900000"); //也可以用变量代替
m_pRs->PutCollect("MobileNo",vTemp);
vTemp.Clear(); //..类似写入其他字段
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
(2)删除 // 连接对记录集对象
_RecordsetPtr m_pRs;
m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口 try
{
CString strRecordSet;
strRecordSet="SELECT * FROM TABLE "; // TABLE为表名
m_pRs->Open((_bstr_t)strRecordSet,
variant_t((IDispatch*)theApp.m_pCon,true),
adOpenDynamic,
adLockOptimistic,
adCmdText); //删除
if(VARIANT_FALSE == m_pRs->EndOfFile) //有纪录选出才操作
{
while(!m_pRs->EndOfFile)
{
//删除当前纪录
m_pRs->Delete(adAffectCurrent);
m_pRs->MoveNext();
// //记录集指针移一条(只删除一条选择的纪录,去掉while循环,用此部分)
// if(VARIANT_FALSE == m_pRs->EndOfFile)
// {
// m_pRs->MoveNext();
// }
// else //到了最后一条则移到第一条
// {
// m_pRs->MovePrevious();
//
// }
}
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}(3)更新、修改 // 连接对记录集对象
_RecordsetPtr m_pRs;
m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口 try
{
CString strRecordSet;
strRecordSet="SELECT * FROM TABLE "; // TABLE为表名
m_pRs->Open((_bstr_t)strRecordSet,
variant_t((IDispatch*)theApp.m_pCon,true),
adOpenDynamic,
adLockOptimistic,
adCmdText); //修改
_variant_t vTemp;
vTemp.SetString("Hello"); //也可以用变量代替
m_pRs->Update("Name",vTemp); //"Name"可用一个_variant_t 变量代替
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}(4)读表字段 // 连接对记录集对象
_RecordsetPtr m_pRs;
m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口 try
{
CString strRecordSet;
strRecordSet="SELECT * FROM TABLE "; // TABLE为表名
m_pRs->Open((_bstr_t)strRecordSet,
variant_t((IDispatch*)theApp.m_pCon,true),
adOpenDynamic,
adLockOptimistic,
adCmdText); //读字段
//循环读入参考上面删除部分
_variant_t vTemp;
CString strName;
vTemp=m_pRs->GetCollect("Name");
strName=(char *)(_bstr_t)vTemp;
vTemp.Clear();
int nAge;
vTemp=m_pRs->GetCollect("Age");
nAge=atoi((_bstr_t)vTemp);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
都有使用access的数据库编程例子
或者去vckbase上载下一两个例子来看看应该没有问题