ACCESS数据库的问题

i_noname 2004-05-07 07:13:17
我在做一个学生管理系统,用ODBC+ACCESS。
数据库有三个表:curriculum,student,Result;
curriculum是课程表,有ID(m_ID),Name(m_Name),Point(m_point)三个列
student是学生表,有ID(m_ID2),Name(m_Name2)两列
Result是成绩表,有SID(m_SID),CID(m_CID),Result(m_Result)三列

现在我只要显示学生表的内容,我做了一个ListCtrl,有学号和姓名两列。代码如下:
int i = 0;
m_pSet->MoveFirst();
CString s;
do
{
s.Format("%d",m_pSet->m_ID2);
m_ListCtrl.InsertItem(i,s,0);
m_ListCtrl.SetItemText(i,1,m_pSet->m_Name2);
i++;
m_pSet->MoveNext();
}
while(! m_pSet->IsEOF());
m_pSet->MoveFirst();

运行的时候出现的问题是:m_pSet->MoveNext()的时候,并不是指向m_ID2的下一列而是m_ID的下一列。
怎么才能实现我想要的功能呢?
...全文
97 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2004-05-08
  • 打赏
  • 举报
回复
直接给每一个表派生一个以CRecordSet为基类的记录集
i_noname 2004-05-07
  • 打赏
  • 举报
回复
楼上的,这样做的话如果我要用另两个表怎么办?还有,我刚才试过了,直接删的话VC说参数不足
void CMyjxjSet::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CMyjxjSet)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[curriculum].[ID]"), m_ID);
RFX_Text(pFX, _T("[curriculum].[Name]"), m_Name);
RFX_Double(pFX, _T("[Point]"), m_Point);
RFX_Double(pFX, _T("[Quotiety]"), m_Quotiety);
RFX_Text(pFX, _T("[SID]"), m_SID);
RFX_Text(pFX, _T("[CID]"), m_CID);
RFX_Text(pFX, _T("[Result]"), m_Result);
RFX_Text(pFX, _T("[Memo]"), m_Memo);
RFX_Text(pFX, _T("[student].[ID]"), m_ID2);
RFX_Text(pFX, _T("[student].[Name]"), m_Name2);
//}}AFX_FIELD_MAP
}
删掉这些参数的话我后边的工作就没法继续了啊
菜牛 2004-05-07
  • 打赏
  • 举报
回复
CString CMyjxjSet::GetDefaultSQL()
{
return _T("[student]");
}
i_noname 2004-05-07
  • 打赏
  • 举报
回复
MyjxjSet.cpp:

#include "stdafx.h"
#include "Myjxj.h"
#include "MyjxjSet.h"

IMPLEMENT_DYNAMIC(CMyjxjSet, CRecordset)

CMyjxjSet::CMyjxjSet(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CMyjxjSet)
m_ID = _T("");
m_Name = _T("");
m_Point = 0.0;
m_Quotiety = 0.0;
m_SID = _T("");
m_CID = _T("");
m_Result = _T("");
m_Memo = _T("");
m_ID2 = _T("");
m_Name2 = _T("");
m_nFields = 10;
//}}AFX_FIELD_INIT
m_nDefaultType = dynaset;
}

CString CMyjxjSet::GetDefaultConnect()
{
return _T("ODBC;DSN=JXJ");
}

CString CMyjxjSet::GetDefaultSQL()
{
return _T("[student],[curriculum],[Result]");
}

void CMyjxjSet::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CMyjxjSet)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[curriculum].[ID]"), m_ID);
RFX_Text(pFX, _T("[curriculum].[Name]"), m_Name);
RFX_Double(pFX, _T("[Point]"), m_Point);
RFX_Double(pFX, _T("[Quotiety]"), m_Quotiety);
RFX_Text(pFX, _T("[SID]"), m_SID);
RFX_Text(pFX, _T("[CID]"), m_CID);
RFX_Text(pFX, _T("[Result]"), m_Result);
RFX_Text(pFX, _T("[Memo]"), m_Memo);
RFX_Text(pFX, _T("[student].[ID]"), m_ID2);
RFX_Text(pFX, _T("[student].[Name]"), m_Name2);
//}}AFX_FIELD_MAP
}
-------------------------------------------------------------
-------------------------------------------------------------
MyjxjView.cpp:

#include "stdafx.h"
#include "Myjxj.h"

#include "MyjxjSet.h"
#include "MyjxjDoc.h"
#include "MyjxjView.h"

IMPLEMENT_DYNCREATE(CMyjxjView, CRecordView)

CMyjxjView::CMyjxjView()
: CRecordView(CMyjxjView::IDD)
{
//{{AFX_DATA_INIT(CMyjxjView)
m_pSet = NULL;
//}}AFX_DATA_INIT
// TODO: add construction code here

}

CMyjxjView::~CMyjxjView()
{
}

void CMyjxjView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyjxjView)
DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
//}}AFX_DATA_MAP
}

BOOL CMyjxjView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CRecordView::PreCreateWindow(cs);
}

void CMyjxjView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_myjxjSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_ListCtrl.InsertColumn(0,_T("学号"),LVCFMT_IMAGE|LVCFMT_LEFT);
m_ListCtrl.InsertColumn(1,_T("姓名"));
int j;
for(j=0;j<2;j++)
{
m_ListCtrl.SetColumnWidth(j ,90);
}


}

CMyjxjDoc* CMyjxjView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyjxjDoc)));
return (CMyjxjDoc*)m_pDocument;
}


/////////////////////////////////////////////////////////////////////////////
// CMyjxjView database support
CRecordset* CMyjxjView::OnGetRecordset()
{
return m_pSet;
}


void CMyjxjView::Show()
{
int i = 0;
m_pSet->MoveFirst();
CString s;
do
{
s.Format("%d",m_pSet->m_ID2);
m_ListCtrl.InsertItem(i,s,0);
m_ListCtrl.SetItemText(i,1,m_pSet->m_Name2);
i++;
m_pSet->MoveNext();
}
while(! m_pSet->IsEOF());
m_pSet->MoveFirst();

}

void CMyjxjView::OnShow() //这是一个按钮涵数
{
// TODO: Add your control notification handler code here
this->Show();
}


Kudeet 2004-05-07
  • 打赏
  • 举报
回复
m_pSet是怎么建立的啊!
把代码帖一下!
i_noname 2004-05-07
  • 打赏
  • 举报
回复
m_pSet和表绑定是什么意思?怎么看?
呵呵,我是菜鸟
Kudeet 2004-05-07
  • 打赏
  • 举报
回复
你的情况就不能修改数据库了!向导是不可改的!如果要改数据库,就只有重新运行向导。
Kudeet 2004-05-07
  • 打赏
  • 举报
回复
你的m_pSet是和表绑定了的吗?
i_noname 2004-05-07
  • 打赏
  • 举报
回复
向导叫我选数据源的时候我把三个表都点上了
CString CMyjxjSet::GetDefaultSQL()
{
return _T("[curriculum],[Result],[student]");
}
怎么改?
课程表里的ID和NAME是课程号和课程名,
学生表里的ID和NAME是学号和学生姓名
Kudeet 2004-05-07
  • 打赏
  • 举报
回复
课程表的ID(m_ID),Name(m_Name)和学生表ID,Name列是一样的吗?
如果一样 那就不要学生表啦
不一样的话 你把两个表的字段名不要搞到一样试一下啊!
byry 2004-05-07
  • 打赏
  • 举报
回复
你的m_pSet应该是指向第一个表才对!
你看看是不是m_pSet的问题!

4,011

社区成员

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

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