数据会出现,但是 添加会报错 不能打开数据集,删除也会报一样的问题,但是能删掉。
先是ADOCOnn.h
#if !defined(AFX_ADOCONN_H__B75F3E6D_C7BC_4198_9B22_94F7FEE5B8B8__INCLUDED_)
#define AFX_ADOCONN_H__B75F3E6D_C7BC_4198_9B22_94F7FEE5B8B8__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CADOConn  
{
public:
_RecordsetPtr m_pRecordset;    // 指向Recordset对象的指针
_ConnectionPtr m_pConnection;  // 指向Connection对象的指针
public:
_bstr_t bstrSQL;
_RecordsetPtr& GetRecordset();
void ExitConnect();
void OnInitADOConn();
_RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
BOOL ExecuteSQL(_bstr_t bstrSQL);
CADOConn();
virtual ~CADOConn();};ADOConn.cpp的
CADOConn::CADOConn()
{}CADOConn::~CADOConn()
{}void CADOConn::OnInitADOConn()
{
::CoInitialize(NULL);   // 初始化COM环境
try
{
m_pConnection.CreateInstance("ADODB.Connection");  // 创建Connection对象
 // 设置连接字符串
_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TA.mdb";
m_pConnection->Open(strConnect,"","",adModeUnknown);  // 打开数据库
}
catch (_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库路径是否正确!");  
}
}void CADOConn::ExitConnect()
{
//关闭记录集和连接
if ( m_pRecordset != NULL )
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
::CoUninitialize();
}_RecordsetPtr& CADOConn::GetRecordset(_bstr_t bstrSQL)
{
try
{
if ( m_pConnection == NULL )
OnInitADOConn();
        m_pRecordset.CreateInstance(__uuidof(Recordset));  // 创建Recordset对象 
      // 打开记录集
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("不能打开记录集!");  
}
  
return m_pRecordset;
}BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if ( m_pConnection == NULL )
OnInitADOConn();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);  // 执行SQL语句
return true;
}
catch(_com_error e)
{
AfxMessageBox("不能打开记录集!"); 
    return false;
}
}接下来是
      void CBaseInfoDlg::ListRecordset(_bstr_t bstrSQL)
     {
m_BaseInfoList.DeleteAllItems();   // 删除列表中原来的记录
     CADOConn m_ADOConn;
    m_ADOConn.OnInitADOConn();
    _RecordsetPtr BaseInfoSet;  // 记录集对象指针
       BaseInfoSet=m_ADOConn.GetRecordset(bstrSQL);
    int i=0;    // 记录序号
        _variant_t theValue;
        CString strTemp;
        // 输出匹配的记录,直到记录集为空 
        while ( !BaseInfoSet->adoEOF )   // 如果记录集不空
        { // 设置ListCtrl控件的Item值
        strTemp="";
        theValue = BaseInfoSet->GetCollect("CusName"); //获取姓名
        if ( theValue.vt != VT_NULL )
        strTemp = (char*)_bstr_t(theValue);
        m_BaseInfoList.InsertItem(i, strTemp );
         strTemp="";
        theValue = BaseInfoSet->GetCollect("CusID"); //获取编号
        if ( theValue.vt != VT_NULL )
        strTemp = (char*)_bstr_t(theValue);
        m_BaseInfoList.SetItemText(i,1,strTemp );
         strTemp="";
        theValue = BaseInfoSet->GetCollect("CusAge"); //获取年龄
        if ( theValue.vt != VT_NULL )
        strTemp = (char*)_bstr_t(theValue);
        m_BaseInfoList.SetItemText(i,2,strTemp );
          strTemp="";
        theValue = BaseInfoSet->GetCollect("CusCho"); //获取旅行团号
        if ( theValue.vt != VT_NULL )
        strTemp = (char*)_bstr_t(theValue);
        m_BaseInfoList.SetItemText(i,3,strTemp );
        
        BaseInfoSet->MoveNext();   // 移到下一条记录
        i++;
        }
if(0==i)
{
MessageBox("没有附和条件的纪录!");
return;
}
        m_ADOConn.ExitConnect();
    
 }void CBaseInfoDlg::OnButtonAdd() 
{
// TODO: Add your control notification handler code here
UpdateData();
if ( m_CusName.IsEmpty() )
{ MessageBox("姓名不能为空!");
return;
}
if ( m_CusID.IsEmpty() )
{ MessageBox("编号不能为空!");
return;
}
// 查找是否有相同
_bstr_t vSQL;
vSQL = "select * from Custom WHERE CusID='" + m_CusID + "'";
  CADOConn m_ADOConn;
m_ADOConn.OnInitADOConn();
_RecordsetPtr BaseInfoSet;  // 记录集对象指针
   BaseInfoSet=m_ADOConn.GetRecordset(vSQL);  
// 判断数据库中是否相同,如果有则退出
if ( !BaseInfoSet->adoEOF )
{
MessageBox("存在同样信息!");
m_ADOConn.ExitConnect();
return;
}
// 如果没有,则执行正常的添加操作   vSQL = "insert into Custom values('"+m_CusName+"','"+m_CusID+"','"+m_CusAge+"','"+m_CusCho+"')";
  m_ADOConn.ExecuteSQL(vSQL);  // 向数据库表中添加一条记录
m_ADOConn.ExitConnect();
ListRecordset(); // 显示记录集
}void CBaseInfoDlg::OnButtonDel() 
{
// TODO: Add your control notification handler code here
      UpdateData();
    if ( MessageBox("是否删除当前信息?","请确认",MB_YESNO | MB_ICONQUESTION )==IDYES )
    {
_bstr_t vSQL;
     CADOConn m_ADOConn;
    m_ADOConn.OnInitADOConn();
       // 删除所选信息
vSQL="delete from Custom where CusID='"+m_CusID+"'";
        m_ADOConn.ExecuteSQL(vSQL);
        m_ADOConn.ExitConnect();
    
ListRecordset(); // 显示记录集
MessageBox("删除成功!");
}
}void CBaseInfoDlg::OnButtonModify() 
{
// TODO: Add your control notification handler code here
UpdateData();
   _bstr_t vSQL;
    _RecordsetPtr BaseInfoSet;
   vSQL = "select * from Custom where CusID='" + m_CusID + "'";
   CADOConn m_ADOConn;
m_ADOConn.OnInitADOConn();
BaseInfoSet=m_ADOConn.GetRecordset(vSQL);
_variant_t theValue;
CString strTemp;
if( !BaseInfoSet->adoEOF )   // 如果记录集不空,修改该记录的值
{
BaseInfoSet->Fields->GetItem("CusName")->Value=_bstr_t(m_CusName);
BaseInfoSet->Fields->GetItem("CusID")->Value=_bstr_t(m_CusID);
    BaseInfoSet->Fields->GetItem("CusAge")->Value=_bstr_t(m_CusAge);
        BaseInfoSet->Fields->GetItem("CusCho")->Value=_bstr_t(m_CusCho);
BaseInfoSet->Update();
}
else
return;
m_ADOConn.ExitConnect();
  ListRecordset( );
 MessageBox("修改成功!");
}谢谢了