MFC列表控件关联sql数据库表想显示出整张表但显示不出

weixin_46687552 2020-06-04 05:41:39
实在没多少分,所以就写详细了点,希望能帮解决一下真的谢谢了
我的程序是可以编译的,这是.cpp文件,
#include "stdafx.h"
#include "宿舍管理系统.h"
#include "MainHostel.h"
#include "MainHostelSet1.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainHostel dialog


CMainHostel::CMainHostel(CWnd* pParent /*=NULL*/)
: CDialog(CMainHostel::IDD, pParent)
{
//{{AFX_DATA_INIT(CMainHostel)
m_Dormitory_dno = _T("");
m_louno = _T("");
m_rnum = 0;
m_wrum = 0;
m_dphone = _T("");
//}}AFX_DATA_INIT
}


void CMainHostel::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMainHostel)
DDX_Control(pDX, IDC_LIST_HOSTEL, m_HostelList);
DDX_Text(pDX, IDC_EDIT1, m_Dormitory_dno);
DDX_Text(pDX, IDC_EDIT2, m_louno);
DDX_Text(pDX, IDC_EDIT3, m_rnum);
DDX_Text(pDX, IDC_EDIT4, m_wrum);
DDX_Text(pDX, IDC_EDIT5, m_dphone);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMainHostel, CDialog)
//{{AFX_MSG_MAP(CMainHostel)
ON_BN_CLICKED(IDC_BUTTON_ADDHOSTEL, OnButtonAddhostel)
ON_BN_CLICKED(IDC_BUTTON_DELHOSTEL, OnButtonDelhostel)
ON_BN_CLICKED(IDC_BUTTON_EDITHOSTEL, OnButtonEdithostel)
ON_NOTIFY(NM_CLICK, IDC_LIST_HOSTEL, OnClickListHostel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainHostel message handlers


BOOL CMainHostel::OnInitDialog()
{
CDialog::OnInitDialog();

m_database.Open(_T("廖利兵"));


m_HostelList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP); // 整行选择、网格线

m_HostelList.InsertColumn(0, _T("宿舍号"), LVCFMT_LEFT, 100); // 插入第2列的列名
m_HostelList.InsertColumn(1, _T("楼号"), LVCFMT_LEFT, 100); // 插入第3列的列名
m_HostelList.InsertColumn(2, _T("应住人数"), LVCFMT_LEFT, 100); // 插入第4列的列名
m_HostelList.InsertColumn(3, _T("实住人数"), LVCFMT_LEFT, 100); // 插入第5列的列名
m_HostelList.InsertColumn(4, _T("宿舍电话"), LVCFMT_LEFT, 100);
CString str;
str.Format("select * from Dormitory order by dno");
List_All(str);

return TRUE;
}



BOOL CMainHostel::List_All(CString strSQL)
{ CDialog::OnInitDialog();
m_HostelList.DeleteAllItems();
CMainHostelSet1 m_Dormitory;
try{

if (m_Dormitory.IsOpen())
m_Dormitory.Close();
if (!m_Dormitory.Open(CRecordset::snapshot, strSQL)){
MessageBox("打开数据库失败","连接数据库",MB_OK);
return false;
}
}

catch (CDBException *e){
e->ReportError();
}
int nIndex = 0;
m_Dormitory.MoveFirst();



while (!m_Dormitory.IsEOF()){
LV_ITEM litem;
litem.mask = LVIF_TEXT;
litem.iItem = nIndex;
litem.iSubItem = 0;




m_HostelList.InsertItem(&litem);

m_HostelList.SetItemText(nIndex, 0, m_Dormitory.m_Dormitory_dno);
m_HostelList.SetItemText(nIndex, 1, m_Dormitory.m_louno);

CString wrum="";
CString rnum="";

wrum.Format(_T("%3d"),m_Dormitory.m_wrum);
rnum.Format(_T("%3d"),m_Dormitory.m_rnum);
m_HostelList.SetItemText(nIndex, 2, rnum);
m_HostelList.SetItemText(nIndex, 3, wrum);
m_HostelList.SetItemText(nIndex, 4, m_Dormitory.m_dphone);


m_Dormitory.MoveNext();
nIndex++;
}
m_Dormitory.Close();

return true;
}



这是建立exe出错的两个函数,如果把list_all函数去掉就只能显示类似这个,如果不去掉,,点击按钮后,整个exe界面直接消失了,我感觉是数据库链接的问题
如果是按F5运行的话,会出现如下状况按确定后
数据库连接代码如下[code=text#include "stdafx.h"
#include "宿舍管理系统.h"
#include "MainHostelSet1.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainHostelSet1

IMPLEMENT_DYNAMIC(CMainHostelSet1, CRecordset)

CMainHostelSet1::CMainHostelSet1(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CMainHostelSet1)
m_dphone = _T("");
m_louno = _T("");
m_rnum = 0;
m_wrum = 0;
m_Dormitory_dno = _T("");
m_nFields = 5;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}


CString CMainHostelSet1::GetDefaultConnect()
{
return _T("ODBC;DSN=廖利兵");
}

CString CMainHostelSet1::GetDefaultSQL()
{
return _T("[dbo].[Dormitory]");
}

void CMainHostelSet1::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CMainHostelSet1)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[dphone]"), m_dphone);
RFX_Text(pFX, _T("[louno]"), m_louno);
RFX_Long(pFX, _T("[rnum]"), m_rnum);
RFX_Long(pFX, _T("[wrum]"), m_wrum);
RFX_Text(pFX, _T("[dno]"), m_Dormitory_dno);
//}}AFX_FIELD_MAP
}

/////////////////////////////////////////////////////////////////////////////
// CMainHostelSet1 diagnostics

#ifdef _DEBUG
void CMainHostelSet1::AssertValid() const
{
CRecordset::AssertValid();
}

void CMainHostelSet1::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG
][/code] 如果可以,请大佬解决一下,邮箱1410679979@qq.com 或者评论回复,尽量不要说术语,就说一下怎么改,本人小白,谢谢啦,
...全文
146 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Simple-Soft 2020-06-06
  • 打赏
  • 举报
回复
f5的时候,看一下出错时的调用堆栈情况,就可以知道错误原因

4,011

社区成员

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

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