📄 rscgdlg8.cpp
字号:
// RsCgDlg8.cpp : implementation file
//
#include "stdafx.h"
#include "RsCgDlg9.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRsCgDlg6 dialog
CRsCgDlg6::CRsCgDlg6(CWnd* pParent /*=NULL*/)
: CDialog(CRsCgDlg6::IDD, pParent)
{
m_strConnection = _T("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=学生选课系统;Data Source=(local)");
m_strCmdText = _T("teaching");
m_pRs = NULL;
//{{AFX_DATA_INIT(CRsCgDlg6)
m_strDlgs_no = _T("");
m_strDlgcourse_no = _T("");
m_dDlgscore = 0;
//}}AFX_DATA_INIT
}
CRsCgDlg6::~CRsCgDlg6()
{
m_pRs = NULL;
}
BOOL CRsCgDlg6::OnInitDialog()
{
HRESULT hr = NOERROR;
IADORecordBinding *piAdoRecordBinding = NULL;
CDialog::OnInitDialog();
try
{
m_pRs.CreateInstance(__uuidof(Recordset));
m_pRs->CursorLocation = adUseClient;
m_pRs->Open((LPCTSTR)m_strCmdText, (LPCTSTR)m_strConnection, adOpenKeyset,
adLockReadOnly, adCmdTableDirect);
if (FAILED(hr = m_pRs->QueryInterface(__uuidof(IADORecordBinding), (LPVOID *)&piAdoRecordBinding)))
_com_issue_error(hr);
if (FAILED(hr = piAdoRecordBinding->BindToRecordset(this)))
_com_issue_error(hr);
RefreshBoundData();
}
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
if (piAdoRecordBinding)
piAdoRecordBinding->Release();
return TRUE;
}
void CRsCgDlg6::RefreshBoundData()
{
if (adFldOK == ls_noStatus)
m_strDlgs_no = m_wszs_no;
else
m_strDlgs_no = _T("");
if (adFldOK == lcourse_noStatus)
m_strDlgcourse_no = m_wszcourse_no;
else
m_strDlgcourse_no = _T("");
if (adFldOK == lscoreStatus)
m_dDlgscore = m_dscore;
else
m_dDlgscore = 0;
UpdateData(FALSE);
}
void CRsCgDlg6::GenerateError(HRESULT hr, PWSTR pwszDescription)
{
CString strError;
strError.Format("Run-time error '%d (%x)'", hr, hr);
strError += "\n\n";
strError += pwszDescription;
AfxMessageBox(strError);
}
void CRsCgDlg6::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRsCgDlg6)
DDX_Text(pDX, IDC_EDIT_S_NO, m_strDlgs_no);
DDX_Text(pDX, IDC_EDIT_COURSE_NO, m_strDlgcourse_no);
DDX_Text(pDX, IDC_EDIT_SCORE, m_dDlgscore);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRsCgDlg6, CDialog)
//{{AFX_MSG_MAP(CRsCgDlg6)
ON_BN_CLICKED(ID_BTN_MOVEFIRST, OnBtnMoveFirst)
ON_BN_CLICKED(ID_BTN_MOVELAST, OnBtnMoveLast)
ON_BN_CLICKED(ID_BTN_MOVENEXT, OnBtnMoveNext)
ON_BN_CLICKED(ID_BTN_MOVEPREVIOUS, OnBtnMovePrevious)
ON_BN_CLICKED(IDC_DELCHOINFO, OnDelchoinfo)
ON_BN_CLICKED(IDC_ADDCHOINFO, OnAddchoinfo)
ON_BN_CLICKED(IDC_SAVECHOINFO, OnSavechoinfo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRsCgDlg6 message handlers
void CRsCgDlg6::OnBtnMoveFirst()
{
try
{
m_pRs->MoveFirst();
RefreshBoundData();
}
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
}
void CRsCgDlg6::OnBtnMoveLast()
{
try
{
m_pRs->MoveLast();
RefreshBoundData();
}
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
}
void CRsCgDlg6::OnBtnMoveNext()
{
try
{
m_pRs->MoveNext();
RefreshBoundData();
}
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
}
void CRsCgDlg6::OnBtnMovePrevious()
{
try
{
m_pRs->MovePrevious();
RefreshBoundData();
}
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
}
void CRsCgDlg6::OnDelchoinfo()
{
// TODO: Add your control notification handler code here
try
{
if(MessageBox("删除当前记录?",NULL,MB_YESNO)==IDYES)
{ //在用户确定后执行删除操作
m_pRs->Delete(adAffectCurrent);
m_pRs->MoveNext();
if(m_pRs->EndOfFile)
//没有下一条记录,则使上一条记录成为当前记录
m_pRs->MoveLast();
RefreshBoundData();
}
}
catch(_com_error &e)
{
m_pRs->CancelBatch(adAffectCurrent); //若发生错误,则撤销删除操作
MessageBox(e.Description());
}
}
//添加
void CRsCgDlg6::OnAddchoinfo()
{
// TODO: Add your control notification handler code here
try
{
long index[1];
VARIANT flds,vals; //声明两个安全数组变量
flds.vt=VT_ARRAY|VT_VARIANT; //定义安全数组类型
vals.vt=VT_ARRAY|VT_VARIANT;
SAFEARRAYBOUND bound; //声明安全数组边界变量
bound.cElements=3; //定义安全数组元素个数
bound.lLbound=0; //定义安全数组最小下标
COleVariant fld[3],val[3]; //用于保存字段名称和字段值
UpdateData(true);//将对话框数据传送给对应的变量
//设置字段名称数组元素值
fld[0]="s_no";
fld[1]="course_no";
fld[2]="score";
//设置字段值数组元素值
val[0]=m_strDlgs_no;
val[1]=m_strDlgcourse_no;
//val[2]=m_strDlgscore;
//创建安全数组
flds.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
vals.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
for(int i=0;i<3;i++){
index[0]=i;
::SafeArrayPutElement(flds.parray,index,&fld[i]); //将字段名称存入安全数组
::SafeArrayPutElement(vals.parray,index,&val[i]); //将字段值称存入安全数组
}
m_pRs->AddNew(&flds,&vals);//使用安全数组添加新记录
MessageBox("成功添加记录!");
}
catch (_com_error &e)
{
m_pRs->CancelUpdate();//若发生错误,则撤销添加记录操作
MessageBox(e.Description());
}
}
void CRsCgDlg6::OnSavechoinfo()
{
// TODO: Add your control notification handler code here
try
{
long index[1];
VARIANT flds,vals; //声明两个安全数组变量
flds.vt=VT_ARRAY|VT_VARIANT; //定义安全数组类型
vals.vt=VT_ARRAY|VT_VARIANT;
SAFEARRAYBOUND bound; //声明安全数组边界变量
bound.cElements=3; //定义安全数组元素个数
bound.lLbound=0; //定义安全数组最小下标
COleVariant fld[3],val[3]; //用于保存字段名称和字段值
UpdateData(true);//将对话框数据传送给对应的变量
//设置字段名称数组元素值
fld[0]="s_no";
fld[1]="course_no";
fld[2]="score";
//设置字段值数组元素值
val[0]=m_strDlgs_no;
val[1]=m_strDlgcourse_no;
//val[2]=m_strDlgscore;
//创建安全数组
flds.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
vals.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
for(int i=0;i<3;i++){
index[0]=i;
::SafeArrayPutElement(flds.parray,index,&fld[i]); //将字段名称存入安全数组
::SafeArrayPutElement(vals.parray,index,&val[i]); //将字段值称存入安全数组
}
m_pRs->Update(&flds,&vals); //使用安全数组修改当前记录
MessageBox("成功保存数据!");
}
catch (_com_error &e){
m_pRs->CancelUpdate(); // 若发生错误,则撤销修改
MessageBox(e.Description());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -