编译没有错误,运行能够进入登陆界面,登陆成功后就弹出错误窗口,说是系统崩溃,大致是内存溢出这是对文档的初始化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();
}
{
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();
}
解决方案 »
- 如果对一个已经排好序的int数组,再排序,哪个算法最快!
- 讨论一下VC6调用webservice的可行性
- 关于dc.SetROP2(R2_NOT)和dc.SetROP2(R2_BLACK)的迷惑 请帮忙解释一下
- 自绘菜单的ModifyMenu问题??
- 请问,VC++中有没有像VB中Inputbox()一样的输入框呀!!恕我太我菜!!!
- 关于右键单击树型控件的提问,请帮帮忙
- 请问那有<ATL Internals>电子书下载
- 有关服务器同时与几个客户端通信的问题
- ActiveX控件问题
- 该买多少书?
- 如何做才能让MFC ActiveX中的Dialog在容器(如IE)中显示?
- WM_CTLCOLOR和=WM_CLTCOLOR什么关系?
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();
}
}}
//
/////////////////////////////////////////////////////////////////////////////#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_)
然后箭头指向
{ ASSERT(::IsWindow(m_hWnd)); return (DWORD) ::SendMessage(m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM) dwNewStyle); }
_AFXCMN_INLINE HCURSOR CListCtrl::SetHotCursor(HCURSOR hc)
什么意思
箭头指向5F41AA6B int 3