?? rscgdlg.cpp
字號:
// RsCgDlg.cpp : implementation file
//
#include "stdafx.h"
#include "RsCgDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRsCgDlg dialog
CRsCgDlg::CRsCgDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRsCgDlg::IDD, pParent)
{
m_strConnection = _T("Provider=SQLOLEDB.1;uid=sa;pwd=123;Initial Catalog=StudentInfo;Data Source=(local)");
m_strCmdText = _T("StudentInfo");
m_pRs = NULL;
//{{AFX_DATA_INIT(CRsCgDlg)
m_strDlgid = _T("");
m_strDlgname = _T("");
m_sDlgage = 0;
m_strDlgsex = _T("");
m_strDlgemail = _T("");
m_key = _T("");
//}}AFX_DATA_INIT
}
CRsCgDlg::~CRsCgDlg()
{
m_pRs = NULL;
}
BOOL CRsCgDlg::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, adOpenStatic,
adLockOptimistic, 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 CRsCgDlg::RefreshBoundData()
{
if (adFldOK == lidStatus)
m_strDlgid = m_wszid;
else
m_strDlgid = _T("");
if (adFldOK == lnameStatus)
m_strDlgname = m_wszname;
else
m_strDlgname = _T("");
if (adFldOK == lageStatus)
m_sDlgage = m_sage;
else
m_sDlgage = 0;
if (adFldOK == lsexStatus)
m_strDlgsex = m_wszsex;
else
m_strDlgsex = _T("");
if (adFldOK == lemailStatus)
m_strDlgemail = m_wszemail;
else
m_strDlgemail = _T("");
UpdateData(FALSE);
}
void CRsCgDlg::GenerateError(HRESULT hr, PWSTR pwszDescription)
{
CString strError;
strError.Format("Run-time error '%d (%x)'", hr, hr);
strError += "\n\n";
strError += pwszDescription;
AfxMessageBox(strError);
}
void CRsCgDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRsCgDlg)
DDX_Control(pDX, ID_EDIT_KEY, m_objkey);
DDX_Text(pDX, IDC_EDIT_ID, m_strDlgid);
DDX_Text(pDX, IDC_EDIT_NAME, m_strDlgname);
DDX_Text(pDX, IDC_EDIT_AGE, m_sDlgage);
DDX_Text(pDX, IDC_EDIT_SEX, m_strDlgsex);
DDX_Text(pDX, IDC_EDIT_EMAIL, m_strDlgemail);
DDX_Text(pDX, ID_EDIT_KEY, m_key);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRsCgDlg, CDialog)
//{{AFX_MSG_MAP(CRsCgDlg)
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(ID_SAVERECORD, OnSaverecord)
ON_BN_CLICKED(ID_DELETERECORD, OnDeleterecord)
ON_BN_CLICKED(ID_ADDRECORD, OnAddrecord)
ON_WM_DESTROY()
ON_BN_CLICKED(ID_QUERY, OnQuery)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRsCgDlg message handlers
void CRsCgDlg::OnBtnMoveFirst()
{
try
{
if (m_pRs->AbsolutePosition>1)
m_pRs->MoveFirst();
RefreshBoundData();
}
catch (_com_error &e)
{
MessageBox(e.Description());
}
}
void CRsCgDlg::OnBtnMoveLast()
{
try
{
if (m_pRs->AbsolutePosition<m_pRs->RecordCount)
m_pRs->MoveLast();
RefreshBoundData();
}
catch (_com_error &e)
{
MessageBox(e.Description());
}
}
void CRsCgDlg::OnBtnMoveNext()
{
try
{
if (m_pRs->AbsolutePosition<m_pRs->RecordCount)
m_pRs->MoveNext();
RefreshBoundData();
}
catch (_com_error &e)
{
MessageBox(e.Description());
}
}
void CRsCgDlg::OnBtnMovePrevious()
{
try
{
if (m_pRs->AbsolutePosition>1)
m_pRs->MovePrevious();
RefreshBoundData();
}
catch (_com_error &e)
{
MessageBox(e.Description());
}
}
void CRsCgDlg::OnSaverecord()
{
try
{
long index[1];
VARIANT flds,vals; //聲明兩個安全數組變量
flds.vt=VT_ARRAY|VT_VARIANT; //定義安全數組類型
vals.vt=VT_ARRAY|VT_VARIANT;
SAFEARRAYBOUND bound; //聲明安全數組邊界變量
bound.cElements=5; //定義安全數組元素個數
bound.lLbound=0; //定義安全數組最小下標
COleVariant fld[5],val[5]; //用于保存字段名稱和字段值
UpdateData(true);//將對話框數據傳送給對應的變量
//設置字段名稱數組元素值
fld[0]="id";
fld[1]="name";
fld[2]="age";
fld[3]="sex";
fld[4]="email";
//設置字段值數組元素值
val[0]=m_strDlgid;
val[1]=m_strDlgname;
val[2]=m_sDlgage;
val[3]=m_strDlgsex;
val[4]=m_strDlgemail;
//創建安全數組
flds.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
vals.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
for(int i=0;i<5;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());
}
}
void CRsCgDlg::OnDeleterecord()
{
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 CRsCgDlg::OnAddrecord()
{
try
{
long index[1];
VARIANT flds,vals; //聲明兩個安全數組變量
flds.vt=VT_ARRAY|VT_VARIANT; //定義安全數組類型
vals.vt=VT_ARRAY|VT_VARIANT;
SAFEARRAYBOUND bound; //聲明安全數組邊界變量
bound.cElements=5; //定義安全數組元素個數
bound.lLbound=0; //定義安全數組最小下標
COleVariant fld[5],val[5]; //用于保存字段名稱和字段值
UpdateData(true);//將對話框數據傳送給對應的變量
//設置字段名稱數組元素值
fld[0]="id";
fld[1]="name";
fld[2]="age";
fld[3]="sex";
fld[4]="email";
//設置字段值數組元素值
val[0]=m_strDlgid;
val[1]=m_strDlgname;
val[2]=m_sDlgage;
val[3]=m_strDlgsex;
val[4]=m_strDlgemail;
//創建安全數組
flds.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
vals.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
for(int i=0;i<5;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 CRsCgDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
}
void CRsCgDlg::OnQuery()
{
UpdateData(true);
if(m_key!=""){
if(!(m_pRs->BOF && m_pRs->EndOfFile)){
m_pRs->MoveFirst();
while(!m_pRs->EndOfFile)
{
if(m_wszname==m_key)
break;
m_pRs->MoveNext();
}
if(m_pRs->EndOfFile)
MessageBox("沒有找到符合條件的記錄!");
else
RefreshBoundData();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -