首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC中 记录集 没法打开

2013-01-07 
MFC中 记录集 无法打开数据会出现,但是 添加会报错 不能打开数据集,删除也会报一样的问题,但是能删掉。先是

MFC中 记录集 无法打开
数据会出现,但是 添加会报错 不能打开数据集,删除也会报一样的问题,但是能删掉。
先是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("修改成功!");
}

谢谢了



[解决办法]
这么长的代码,到底哪一句报错啊
[解决办法]
你看看捕获的错误报的是什么内容嘛~
e.Description()

热点排行