vc与数据库编程,急救!!!!!!

cpsoft 2001-08-05 09:41:13
兄弟在用vc的MFC DAO编一个人事管理的数据库,(参考清华出版社的《vc6数据库开发指南》),其中在定义数据库对象时,(语句CDaoDatabase *m_pDatabase),对象非空,(值为cdcdcdcd),而在书中的对象定义后为空,不知为什么?而且,书上的程序可以运行,我的在第一次调用m_pDatabase->isOpen时出错?不知何故请大侠们帮忙!
书上的部分源程序:
void CManagerView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_list.SetExtendedStyle(LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT
|LVS_EX_GRIDLINES|LVS_EX_TRACKSELECT);
OnAddress();//初始化时进入通讯录

}

void CManagerView::OnAddress()
{
// TODO: Add your command handler code here
/*char path[50];
::GetCurrentDirectory(50,path);
strcat(path,"\\");
m_strDatabaseName=_T(path);
m_strDatabaseName+="Family.mdb";//得到数据库文件的路径
*/
m_strDatabaseName="G:\\vctemp\\Family.mdb";
m_list.DeleteAllItems();//删除列表中的所有行

//删除列表中的所有列
while(m_list.DeleteColumn(0));

m_bIsOpen=FALSE;
m_bIsNewDatabase=FALSE;

//设置工具栏组框中的选项
CMainFrame *pWnd=(CMainFrame *)AfxGetMainWnd();
pWnd->m_wndComboBox.SelectString(0,"通讯录");
if(OpenDatabase())
LoadDatabaseData();
}
BOOL CManagerView::OpenDatabase()
{
// 如果数据库已被打开则关闭并删除之
if (m_pDatabase!= NULL)
{
if (m_pDatabase->IsOpen())
m_pDatabase->Close();
delete m_pDatabase;
}

// 创建新的数据库对象
m_pDatabase = new CDaoDatabase;

// 数据库指针创建失败
if (& (*m_pDatabase) == NULL)
return FALSE; // fatal error

// 如果创建成功则打开该数据库
try
{
m_pDatabase->Open(m_strDatabaseName);
}
catch (CDaoException *e)
{
// 如果文件不存在
if (e->m_pErrorInfo->m_lErrorCode == 3024)
{
// 生成输出信息
CString message = _T("不能打开数据库--例外: ");
message += e->m_pErrorInfo->m_strDescription;

// 输出到消息对话框
AfxMessageBox(message);

// 返回
return FALSE;
}
else // 如果是其它错误
{
// 生成输出信息
CString message = _T("数据库打开失败--例外: ");
message += e->m_pErrorInfo->m_strDescription;

// 输出消息对话框
AfxMessageBox(message);

// 返回
return FALSE;
}

// 删除例外
e->Delete();

delete m_pDatabase;
m_pDatabase = NULL;
}
catch (CMemoryException *e)
{
// 输出到消息对话框
AfxMessageBox(_T("数据库打开失败--内存出错!"));

// 删除例外
e->Delete();

delete m_pDatabase;
m_pDatabase = NULL;

// 返回
return FALSE;
}

return TRUE;
}
数据定义:
// managerView.h : interface of the CManagerView class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_MANAGERVIEW_H__2CBBF36D_59A4_11D3_860E_C141D5317B49__INCLUDED_)
#define AFX_MANAGERVIEW_H__2CBBF36D_59A4_11D3_860E_C141D5317B49__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "MyListCtrl.h"
#include "AddrSet.h"
#include "MoneySet.h"

class CManagerView : public CFormView
{
protected: // create from serialization only
CManagerView();//构造函数
DECLARE_DYNCREATE(CManagerView)

public:
//{{AFX_DATA(CManagerView)
enum { IDD = IDD_MANAGER_FORM };
CMyListCtrl m_list;//与列表框控件相连的控制变量
//}}AFX_DATA

// Attributes
public:
CManagerDoc* GetDocument();
// Operations
public:
CDaoDatabase *m_pDatabase;//数据库指针
CDaoTableDef *m_pTableDef;//数据库表定义指针
CDaoFieldInfo m_FieldInfo;//数据库表字段信息
CString m_strTableName;//数据库表名
CString m_strDatabaseName;//数据库名
int m_nFieldIndex;//数据库表的字段数目亦即列表框的列数

CAddrSet m_addrSet;//“通讯录”的记录集
CMoneySet m_moneySet;//“帐簿”记录集

BOOL m_bIsOpen;//是否有数据库打开
BOOL m_bIsNewDatabase;//是否打开了新数据库
BOOL m_bIsAddress;//是否打开了通讯录
BOOL m_bIsMoney;//是否打开了帐簿

void LoadDatabaseData();//在列表框中将数据库表数据显示出来
BOOL OpenDatabase();//打开数据库

void ModifyAddress();//更改“通讯录”记录
void ModifyMoney();//更改“帐簿”记录
void AddAddress();//添加“通讯录”记录
void AddMoney();//添加“帐簿”记录
void DelAddress();//删除“通讯录”记录
void DelMoney();//删除“帐簿”记录

void Sort(CString& str);//排序数据库表
CString VariantToStr(const COleVariant& var);//将OLE变量转换为C++变量

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CManagerView)
public:
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);
virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
// virtual afx_msg void OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult);
//}}AFX_VIRTUAL

// Implementation
public:
virtual ~CManagerView();//构析函数
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
//{{AFX_MSG(CManagerView)
afx_msg void OnDblclkAddressList(NMHDR* pNMHDR, LRESULT* pResult);//处理在列表框中鼠标的双击
afx_msg void OnAdd();//处理工具栏的添加按钮命令
afx_msg void OnModify();//处理工具栏的修改按钮命令
afx_msg void OnDel();//处理工具栏的删除按钮命令
afx_msg void OnColumnclickAddressList(NMHDR* pNMHDR, LRESULT* pResult);//处理单击列表框列头
afx_msg void OnUpdateAdd(CCmdUI* pCmdUI);//处理工具栏添加按钮状态的更新
afx_msg void OnUpdateDel(CCmdUI* pCmdUI);//处理工具栏删除按钮状态的更新
afx_msg void OnUpdateModify(CCmdUI* pCmdUI);//处理工具栏修改按钮状态的更新
afx_msg void OnFileClose();//处理数据库关闭命令
afx_msg void OnFileOpen();//处理数据库打开命令
afx_msg void OnUpdate();//处理工具栏的更新显示命令
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);//处理鼠标右击时弹出快捷菜单
afx_msg void OnUpdateUpdate(CCmdUI* pCmdUI);//处理工具栏更新显示按钮状态的更新
afx_msg void OnAddress();//处理工具栏通讯录按钮命令
afx_msg void OnUpdateAddress(CCmdUI* pCmdUI);//处理工具栏中通讯录按钮状态的更新
afx_msg void OnMoney();//处理工具栏帐簿按钮命令
afx_msg void OnUpdateMoney(CCmdUI* pCmdUI);//处理工具栏中帐簿按钮状态的更新
afx_msg void OnNewAddress();
afx_msg void OnNewDatabase();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG // debug version in managerView.cpp
inline CManagerDoc* CManagerView::GetDocument()
{ return (CManagerDoc*)m_pDocument; }
#endif

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MANAGERVIEW_H__2CBBF36D_59A4_11D3_860E_C141D5317B49__INCLUDED_)
...全文
47 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lf_77 2001-08-20
  • 打赏
  • 举报
回复
up
ruansoft 2001-08-05
  • 打赏
  • 举报
回复
是不是m_pDatabase在构造函数中没有初始化为:
m_pDatabase=NULL?
如果没有初始化
if (m_pDatabase!= NULL)
{
if (m_pDatabase->IsOpen())
m_pDatabase->Close();
delete m_pDatabase;
}

肯定会出错的!

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧