编译没有错误,运行能够进入登陆界面,登陆成功后就弹出错误窗口,说是系统崩溃,大致是内存溢出这是对文档的初始化void CPeopleView::OnInitialUpdate()
{
m_list.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | 
LVS_EX_HEADERDRAGDROP );
TCHAR szBuf[20];
LV_COLUMN lvc;

int i;
for ( i = 0; i < 9; i++ )
{
lvc.cx       = 48+14*i;
switch(i)
{
case 0:
wsprintf(szBuf, _T("职工编码"));
lvc.cx = 100;
break;
case 1:
wsprintf(szBuf, _T("姓名") );
lvc.cx = 200;
break;
case 2:
wsprintf(szBuf, _T("性别") );
lvc.cx = 100;
break;
case 3:
wsprintf(szBuf, _T("民族") );
lvc.cx = 100;
break;
case 4:
wsprintf(szBuf, _T("出生年月") );
break;
case 5:
wsprintf(szBuf, _T("婚姻状况") );
break;
case 6:
wsprintf(szBuf, _T("文化程度编码") );
lvc.cx = 200;
break;
case 7:
wsprintf(szBuf, _T("健康状况") );
lvc.cx = 200;
break;
case 8:
wsprintf(szBuf, _T("政治面貌") );
lvc.cx = 200;
break;
case 9:
wsprintf(szBuf, _T("职称编码") );
lvc.cx = 200;
break;
case 10:
wsprintf(szBuf, _T("籍贯") );
lvc.cx = 200;
break;
case 11:
wsprintf(szBuf, _T("身份证号码") );
lvc.cx = 200;
break;
case 12:
wsprintf(szBuf, _T("毕业学校") );
lvc.cx = 200;
break;
case 13:
wsprintf(szBuf, _T("专业或特长") );
lvc.cx = 200;
break;
case 14:
wsprintf(szBuf, _T("户口所在地") );
lvc.cx = 200;
break;
case 15:
wsprintf(szBuf, _T("户口性质") );
lvc.cx = 200;
break;
case 16:
wsprintf(szBuf, _T("现住址") );
lvc.cx = 200;
break;
case 17:
wsprintf(szBuf, _T("职务") );
lvc.cx = 200;
break;
case 18:
wsprintf(szBuf, _T("工种名") );
lvc.cx = 200;
break;
case 19:
wsprintf(szBuf, _T("何时技术培训") );
lvc.cx = 200;
break;
case 20:
wsprintf(szBuf, _T("何时奖励和处分") );
lvc.cx = 200;
break;
case 21:
wsprintf(szBuf, _T("需要说明问题") );
lvc.cx = 200;
break;
case 22:
wsprintf(szBuf, _T("填表人签名") );
lvc.cx = 200;
break;
case 23:
wsprintf(szBuf, _T("填表日期") );
lvc.cx = 200;
break;
case 24:
wsprintf(szBuf, _T("公司审查意见") );
lvc.cx = 200;
break;
case 25:
wsprintf(szBuf, _T("审查日期") );
lvc.cx = 200;
break;
case 26:
wsprintf(szBuf, _T("人员性质") );
lvc.cx = 200;
break;
case 27:
wsprintf(szBuf, _T("入厂时间") );
lvc.cx = 200;
break;
case 28:
wsprintf(szBuf, _T("人员状态") );
lvc.cx = 200;
break;
case 29:
wsprintf(szBuf, _T("备注") );
lvc.cx = 200;
break;
case 30:
wsprintf(szBuf, _T("部门编码") );
lvc.cx = 200;
break; }
lvc.mask     = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvc.fmt      = LVCFMT_LEFT;
lvc.pszText  =szBuf;
lvc.iSubItem = i;         
lvc.cx       = 48+14*i;
m_list.InsertColumn( i, &lvc );
}
m_pDB=NULL;
OpenDatabase(); RefreshData();
}

解决方案 »

  1.   

    这是对函数胡定义
    HCURSOR CPeopleView::OnQueryDragIcon()
    {
    return (HCURSOR) m_hIcon;
    }
    BOOL CPeopleView::InitODBCEnvironment(char *szPathName)
    {
    TCHAR szDesc[2048];
    LPCSTR lpszDriver;
    HMODULE hmodule;
    int nLen;
    int ch='\\';
        CString szTemp,szTemp1;
    szTemp.Empty();
    szTemp1.Empty();
    szTemp = szPathName;
    int result = szTemp.ReverseFind(ch);
        szTemp1 = szTemp.Left(result); // check if the driver is install and construct the create description string
    if (hmodule = ::LoadLibrary(_T("odbcjt32.dll")))
    {
    _stprintf(szDesc, _T("DSN=%s+ DESCRIPTION=%s+ DBQ=%s+ DEFAULTDIR=%s++ "), 
      DSNNAME, DSNNAME, szPathName, szTemp1); lpszDriver = "Microsoft Access Driver (*.mdb)\0";
    ::FreeLibrary(hmodule);
    }
    else
    {
    ::MessageBox(NULL, _T("找不到ODBC驱动程序,请安装\nMicrosoft Access Driver"), 
     _T("错误信息"), MB_OK | MB_ICONERROR); return FALSE;
    } nLen = _tcslen(szDesc);
    for (int i=0; i<nLen; i++)
    {
    if (szDesc[i] == _T('+'))
    szDesc[i] = 0;
    } // create the odbc data source
    if (!::SQLConfigDataSource(NULL, ODBC_ADD_DSN, lpszDriver, (LPCSTR)szDesc))
    {
    ::MessageBox(NULL, _T("创建ODBC数据源失败"), _T("错误信息"), MB_OK | MB_ICONERROR);
    return FALSE;
    } return TRUE;}BOOL CPeopleView::CloseODBCEnvironment(char *szPathName)
    {
    TCHAR szDesc[MAX_PATH];
    LPCSTR lpszDriver;
    int nLen, i;
    int ch='\\';
        CString szTemp,szTemp1;
    szTemp.Empty();
    szTemp1.Empty();
    szTemp = szPathName;
    int result = szTemp.ReverseFind(ch);
        szTemp1 = szTemp.Left(result);
    _stprintf(szDesc, _T("DSN=%s+ DESCRIPTION=%s+ DBQ=%s++ "), DSNNAME, DSNNAME,szTemp1);

    lpszDriver = "Microsoft Access Driver (*.mdb)\0"; nLen = _tcslen(szDesc);
    for (i=0; i<nLen; i++)
    {
    if (szDesc[i] == _T('+'))
    szDesc[i] = 0;
    }
    BOOL bRes=::SQLConfigDataSource(NULL, ODBC_REMOVE_DSN, lpszDriver, (LPCSTR)szDesc);
    if(!bRes)
    return FALSE;
    return TRUE;}void CPeopleView::OpenDatabase()
    {
    TCHAR szTempPath[1024];
    TCHAR szBuffer[400];
        memset(szBuffer,0,sizeof(szBuffer));
    memset(szTempPath,0,sizeof(szTempPath));
    CPeopleApp *pApp = (CPeopleApp *)AfxGetApp();
    if(::GetModuleFileName(NULL,szBuffer,MAX_PATH)!=0)
    {
    pApp->GetCurDir(szBuffer,szTempPath);
    }
        
    lstrcat(szTempPath,"people.mdb");
    if(!InitODBCEnvironment(szTempPath))
     return;
     memset(m_szPathName,0,sizeof(m_szPathName));
     lstrcpy(m_szPathName,szTempPath);
     //open the database and init it
     OpenInitDatabase(DSNNAME);}void CPeopleView::CloseDatabase()
    {
    if(m_dataRecset != NULL)
    {
    if(m_dataRecset->IsOpen ())
    m_dataRecset->Close ();
    delete m_dataRecset;
    m_dataRecset = NULL;
    }
    closeDatabase(&m_pDB);
    CloseODBCEnvironment(m_szPathName);}void CPeopleView::OpenInitDatabase(CString szDatabase)
    {
    openDatabase(&m_pDB,szDatabase,TRUE);
    try
    {
    m_dataRecset = new odbe(m_pDB);
    m_dataRecset->Open (CRecordset::snapshot,"Select * from BookData");
    }
    catch(CException* e)
    {
    e->ReportError ();
    e->Delete ();
    if(m_dataRecset != NULL)
    {
    if(m_dataRecset->IsOpen ())
    m_dataRecset->Close ();
    delete m_dataRecset;
    m_dataRecset = NULL;
    }
    closeDatabase(&m_pDB);
    }
    }int CPeopleView::openDatabase(CDatabase **ppDatabase, CString fileName, BOOL bReportNoOpen)
    {
    // initialize success indicator
    int nReturnCode = 1; // close and delete if necessary
    if (*ppDatabase != NULL)
    {
    if ((*ppDatabase)->IsOpen())
    closeDatabase(ppDatabase);
    delete *ppDatabase;
    } // construct new database
    *ppDatabase = new CDatabase; // failed to allocate
    if (ppDatabase == NULL)
    return -1; // fatal error // now open the database object with error checking
    try
    {
    (*ppDatabase)->Open(fileName,FALSE,FALSE,"ODBC;"); }
    catch (CDBException *e)
    {
            AfxMessageBox(e->m_strError);
            
    // not rethrowing, so delete exception                        
    e->Delete(); delete *ppDatabase;
    *ppDatabase = NULL;
    }
    catch (CMemoryException *e)
    {
    // output status                                              
    AfxMessageBox(_T("Failed to open database--Memory exception thrown."));                                        // not rethrowing, so delete exception                        
    e->Delete(); delete *ppDatabase;
    *ppDatabase = NULL; // indicate fatal error
    nReturnCode = -1;
    } return nReturnCode;}void CPeopleView::closeDatabase(CDatabase **ppDatabase)
    {
    // only process if the database object exists
    if (*ppDatabase != NULL)
    {
    if ((*ppDatabase)->IsOpen())
    (*ppDatabase)->Close();

    // closing doesn't delete the object
    delete *ppDatabase;
    *ppDatabase = NULL;
    }}void CPeopleView::RefreshData()
    {
    CString szTemp;
    szTemp.Empty();
    int nListIndex=0;
        if(m_dataRecset != NULL)
    {
    //list group
            m_dataRecset->MoveFirst();
    while(!m_dataRecset->IsEOF())
    {
    m_list.SetItemText(nListIndex,0,m_dataRecset->m_zgbm);
    m_list.SetItemText(nListIndex,1,m_dataRecset->m_xm);
    m_list.SetItemText(nListIndex,2,m_dataRecset->m_xb);
    m_list.SetItemText(nListIndex,3,m_dataRecset->m_mz);
    m_list.SetItemText(nListIndex,4,m_dataRecset->m_csny);
    m_list.SetItemText(nListIndex,5,m_dataRecset->m_hyzk);
    m_list.SetItemText(nListIndex,6,m_dataRecset->m_whcd);
    m_list.SetItemText(nListIndex,7,m_dataRecset->m_jkzk);
    m_list.SetItemText(nListIndex,8,m_dataRecset->m_zzmm);
    m_list.SetItemText(nListIndex,9,m_dataRecset->m_zcbm);
    m_list.SetItemText(nListIndex,10,m_dataRecset->m_jg);
    m_list.SetItemText(nListIndex,12,m_dataRecset->m_sfzh);
    m_list.SetItemText(nListIndex,12,m_dataRecset->m_byxx);
    m_list.SetItemText(nListIndex,13,m_dataRecset->m_zytc);
    m_list.SetItemText(nListIndex,14,m_dataRecset->m_hkszd);
    m_list.SetItemText(nListIndex,15,m_dataRecset->m_hkxz);
    m_list.SetItemText(nListIndex,16,m_dataRecset->m_xzz);
    m_list.SetItemText(nListIndex,17,m_dataRecset->m_zw);
    m_list.SetItemText(nListIndex,18,m_dataRecset->m_gzm);
    m_list.SetItemText(nListIndex,19,m_dataRecset->m_jspx);
    m_list.SetItemText(nListIndex,20,m_dataRecset->m_jlcf);
    m_list.SetItemText(nListIndex,21,m_dataRecset->m_smwt);
    m_list.SetItemText(nListIndex,22,m_dataRecset->m_tbrqm);
    m_list.SetItemText(nListIndex,23,m_dataRecset->m_tbrq);
    m_list.SetItemText(nListIndex,24,m_dataRecset->m_gsyj);
    m_list.SetItemText(nListIndex,25,m_dataRecset->m_scrq);
    m_list.SetItemText(nListIndex,26,m_dataRecset->m_ryxz);
    m_list.SetItemText(nListIndex,27,m_dataRecset->m_rcsj);
    m_list.SetItemText(nListIndex,28,m_dataRecset->m_ryzt);
    m_list.SetItemText(nListIndex,29,m_dataRecset->m_bz);
    m_list.SetItemText(nListIndex,30,m_dataRecset->m_bmbm);

    nListIndex++;
                m_dataRecset->MoveNext();
    }

    }}
      

  2.   

    这个是peopleview的头文件// peopleView.h : interface of the CPeopleView class
    //
    /////////////////////////////////////////////////////////////////////////////#if !defined(AFX_PEOPLEVIEW_H__EC8A13E1_D9BA_4DF3_86CF_20FADB376855__INCLUDED_)
    #define AFX_PEOPLEVIEW_H__EC8A13E1_D9BA_4DF3_86CF_20FADB376855__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    #include "odbe.h"
    class CPeopleSet;class CPeopleView : public CRecordView
    {
    protected: // create from serialization only
    CPeopleView();
    DECLARE_DYNCREATE(CPeopleView)
    public:
    void RefreshData();
    void closeDatabase(CDatabase **ppDatabase);
    int openDatabase(CDatabase **ppDatabase, CString fileName,BOOL bReportNoOpen /* = TRUE */);
    void OpenInitDatabase(CString szDatabase);
    void CloseDatabase();
    void OpenDatabase();
    BOOL CloseODBCEnvironment(char *szPathName);
    BOOL InitODBCEnvironment(char *szPathName);
    CSuperWordsDlg(CWnd* pParent = NULL); // standard constructor
    odbe  *m_dataRecset;
    TCHAR m_szPathName[400];
    inline CPeopleDoc* CPeopleView::GetDocument()
       { return (CPeopleDoc*)m_pDocument; }public:
    //{{AFX_DATA(CPeopleView)
    enum { IDD = IDD_PEOPLE_FORM };
    CListCtrl m_list;
    CPeopleSet* m_pSet;
    CDatabase* m_pDB;
    //}}AFX_DATA// Attributes
    // Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CPeopleView)
    public:
    virtual CRecordset* OnGetRecordset();
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    virtual void OnInitialUpdate(); // called first time after construct
    virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
    virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
    virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
    //}}AFX_VIRTUAL// Implementation
    public:
    virtual ~CPeopleView();
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endifprotected:// Generated message map functions
    protected:
    //{{AFX_MSG(CPeopleView)
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

    afx_msg void OnDel();
    afx_msg void OnAul();
    afx_msg void OnAdd();
    afx_msg void OnClickList4(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnClose();
    afx_msg void OnDestroy();
    afx_msg void OnPaint();
    afx_msg void Onfind();
    afx_msg void OnChangename();

    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };#ifndef _DEBUG  // debug version in peopleView.cpp#endif///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_PEOPLEVIEW_H__EC8A13E1_D9BA_4DF3_86CF_20FADB376855__INCLUDED_)
      

  3.   

    我调试的是出来下面这个位置c:\...\MFC\Include\AFXCMN2.INL
    然后箭头指向
    { ASSERT(::IsWindow(m_hWnd)); return (DWORD) ::SendMessage(m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM) dwNewStyle); }
    _AFXCMN_INLINE HCURSOR CListCtrl::SetHotCursor(HCURSOR hc)
    什么意思
      

  4.   

    还有一个地方是Disassembly文件
    箭头指向5F41AA6B  int   3
      

  5.   

    使用CListCtrl类时,如果没有和Dialog中的资源绑定,就需要调用CListCtrl的Create函数来手动建立窗口。