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的下一列。
怎么才能实现我想要的功能呢?
...全文
130 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的问题!
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络中的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络中的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。
内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制中的应用,通过Matlab代码实现了控制算法的仿真验证。该方法融合强化学习的在线自适应能力与传统PID控制的稳定性优势,利用QLearning算法动态优化PID控制器的比例、积分、微分参数,以应对水下复杂流体环境、模型不确定性及外部干扰等挑战,从而提升AUV轨迹跟踪的精度、鲁棒性与动态响应性能。文中系统阐述了AUV的六自由度非线性动力学建模过程、QLearning算法的状态空间与动作空间设计、奖励函数构造及训练机制,并详细说明了PID参数自整定的闭环控制架构。仿真结果表明,相较于传统固定参数PID控制器,该智能控制策略在多种工况下均展现出更优的控制效果,有效抑制了超调,加快了响应速度,并增强了抗干扰能力。; 适合人群:具备自动控制理论、强化学习基础及Matlab/Simulink仿真能力,从事水下机器人、智能控制、海洋工程、自动化等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于AUV、UUV等无人水下平台的高精度自主导航与运动控制;②为解决非线性、强耦合、时变系统的控制器参数自适应整定问题提供智能化解决方案;③作为强化学习与经典控制理论深度融合的技术范例,推动智能控制算法在海洋装备中的工程化应用。; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点剖析QLearning的状态-动作-奖励机制设计、PID参数更新逻辑及仿真对比实验结果,有条件者可在更复杂的动力学模型或实际硬件平台上进一步验证与优化算法性能。

4,017

社区成员

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

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