我的执行代码是:void CPropPage1::OnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
//--------------------------------------------------------
hTreeCurrent=m_ctrlTree.GetSelectedItem ();
hTreeParent=m_ctrlTree.GetParentItem(m_ctrlTree.GetSelectedItem ());
//-------------------树型控件的图标更改---------
m_ctrlTree.SetItemImage(hTreeCurrent,1,true );
//----------------------------------------------
TreeCurrent="'"+m_ctrlTree.GetItemText(hTreeCurrent)+"'"; TreeParent=m_ctrlTree.GetItemText (hTreeParent);//---------------------处理ListTree中的相应显示内容--------------
//-------------提取树中当前项及其子项的内容------
hTreeCurrent=m_ctrlTree.GetSelectedItem ();
if( m_ctrlTree.GetChildItem(hTreeCurrent)==NULL)
{
   
CString name1;
name1=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
   MessageBox("123"+name1);
    m_pRecordset.CreateInstance(__uuidof(Recordset));
_variant_t sql="select* from TreeItem where Name=name1 order by ID desc";
m_pRecordset->Open("select* from TreeItem where Name=name1 order by ID desc",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//<<----执行到这句出错
   while(!m_pRecordset->adoEOF)
{
CString id=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID");
CString name=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Name");
CString parentitem=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ParentItem");
CString secnum=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SecNum");
CString tel=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tel");
CString work=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("work");
CString home=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("home");
//m_strEdit=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
    //UpdateData(false);//子项内容显示到Edit控件中
m_pRecordset->MoveNext();
}}
  
//
// CString a;
// a=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
// MessageBox("123"+a);
// m_strEdit=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
// UpdateData(false);//子项内容显示到Edit控件中
//---------------------------------------------------
*pResult = 0;}
//----------------提取当前所选择项的子项文本所组成的字符串------------------------void CPropPage1::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
// CAboutDlg dlgAbout;
// dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
我的错误提示如下:
Unhandled exception in SheetInView.exe:0xC000005:Access Violation
请问这个是怎么回事?谢谢回答

解决方案 »

  1.   

    把sql语句放到数据库执行看sql语句是否正确...
      

  2.   

    "select* from TreeItem where Name=name1 order by ID desc"?name1不是变量吗?怎么还放到字符串里面?
      

  3.   

     m_pRecordset->Open("select* from TreeItem where Name=name1 order by ID desc",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//<<----执行到这句出错
    这句出错,网上查了好多都说是空指针,但是我不知道我哪里用了空指针?
      

  4.   

    后来我修改了修改,修改如下,还是不对,请各位给看看,谢谢
    void CPropPage1::OnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
    {
        NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
    //--------------------------------------------------------
    hTreeCurrent=m_ctrlTree.GetSelectedItem ();
    hTreeParent=m_ctrlTree.GetParentItem(m_ctrlTree.GetSelectedItem ());
    //-------------------树型控件的图标更改---------
    m_ctrlTree.SetItemImage(hTreeCurrent,1,true );
    //----------------------------------------------
    TreeCurrent=m_ctrlTree.GetItemText(hTreeCurrent); TreeParent=m_ctrlTree.GetItemText (hTreeParent);//---------------------处理ListTree中的相应显示内容--------------
    //-------------提取树中当前项及其子项的内容------
    hTreeCurrent=m_ctrlTree.GetSelectedItem ();
    if( m_ctrlTree.GetChildItem(hTreeCurrent)==NULL)
    {
       
    CString name1;
    name1=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
       MessageBox("123"+name1);
        m_pRecordset.CreateInstance(__uuidof(Recordset));
    CString sql;
      sql.Format("select* from TreeItem where Name = '%s' order by ID desc",name1);
     
         _variant_t   vt;   
         vt.vt   =   sql.IsEmpty() ? VT_NULL:VT_BSTR;   
         vt.bstrVal  = sql.AllocSysString();
     MessageBox(sql); m_pRecordset->Open(vt,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
       while(!m_pRecordset->adoEOF)
    {
    CString id1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID");
    MessageBox("12344"+id1);
    CString name1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Name");
    CString parentitem1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ParentItem");
    CString secnum1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SecNum");
    CString tel1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tel");
    CString work1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("work");
    CString home1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("home");
    //m_strEdit=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
        //UpdateData(false);//子项内容显示到Edit控件中
    m_pRecordset->MoveNext();
    }}
      
    //
    // CString a;
    // a=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
    // MessageBox("123"+a);
    // m_strEdit=TreeCurrent+ReturnTreeChilds(m_ctrlTree.GetItemText(hTreeCurrent));
    // UpdateData(false);//子项内容显示到Edit控件中
    //---------------------------------------------------
    *pResult = 0;}
    还是那句带有open函数的出错,但是我又不知道哪错了?