📄 fmodbcsqlview.cpp
字号:
// fmodbcsqlView.cpp : implementation of the CFmodbcsqlView class
//
#include "stdafx.h"
#include "fmodbcsql.h"
#include "fmodbcsqlSet.h"
#include "fmodbcsqlDoc.h"
#include "fmodbcsqlView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFmodbcsqlView
IMPLEMENT_DYNCREATE(CFmodbcsqlView, CRecordView)
BEGIN_MESSAGE_MAP(CFmodbcsqlView, CRecordView)
//{{AFX_MSG_MAP(CFmodbcsqlView)
ON_COMMAND(ID_RECORD_NEXT, OnRecordNext)
ON_COMMAND(ID_RECORD_PREV, OnRecordPrev)
ON_COMMAND(ID_RECORD_FIRST, OnRecordFirst)
ON_COMMAND(ID_RECORD_LAST, OnRecordLast)
ON_UPDATE_COMMAND_UI(ID_RECORD_FIRST, OnUpdateRecordFirst)
ON_UPDATE_COMMAND_UI(ID_RECORD_LAST, OnUpdateRecordLast)
ON_UPDATE_COMMAND_UI(ID_RECORD_NEXT, OnUpdateRecordNext)
ON_UPDATE_COMMAND_UI(ID_RECORD_PREV, OnUpdateRecordPrev)
ON_BN_CLICKED(IDC_INSERT, OnInsert)
ON_BN_CLICKED(IDC_MODIFY, OnModify)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFmodbcsqlView construction/destruction
CFmodbcsqlView::CFmodbcsqlView()
: CRecordView(CFmodbcsqlView::IDD)
{
//{{AFX_DATA_INIT(CFmodbcsqlView)
m_pSet = NULL;
m_record_number = 0;
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CFmodbcsqlView::~CFmodbcsqlView()
{
}
void CFmodbcsqlView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFmodbcsqlView)
DDX_FieldText(pDX, IDC_NAME, m_pSet->m_Name, m_pSet);
DDX_FieldText(pDX, IDC_NATIVE, m_pSet->m_Native_place, m_pSet);
DDX_FieldText(pDX, IDC_CLASS, m_pSet->m_Class_code, m_pSet);
DDX_FieldText(pDX, IDC_NUMBER, m_pSet->m_Student_number, m_pSet);
DDX_FieldText(pDX, IDC_SEX, m_pSet->m_Sex, m_pSet);
DDX_Text(pDX, IDC_RECORD_NUMBER, m_record_number);
//}}AFX_DATA_MAP
}
BOOL CFmodbcsqlView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRecordView::PreCreateWindow(cs);
}
void CFmodbcsqlView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_fmodbcsqlSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
// CFmodbcsqlView diagnostics
#ifdef _DEBUG
void CFmodbcsqlView::AssertValid() const
{
CRecordView::AssertValid();
}
void CFmodbcsqlView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CFmodbcsqlDoc* CFmodbcsqlView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFmodbcsqlDoc)));
return (CFmodbcsqlDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFmodbcsqlView database support
CRecordset* CFmodbcsqlView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CFmodbcsqlView message handlers
void CFmodbcsqlView::OnRecordNext()
{
// TODO: Add your command handler code here
m_pSet->MoveNext();
UpdateData(FALSE);
IncreaseCount();//计算已被处理的记录数
}
void CFmodbcsqlView::OnRecordPrev()
{
// TODO: Add your command handler code here
m_pSet->MovePrev();
UpdateData(FALSE);
IncreaseCount();//计算已被处理的记录数
}
void CFmodbcsqlView::OnRecordFirst()
{
// TODO: Add your command handler code here
m_pSet->MoveFirst();
UpdateData(FALSE);//在进行DDE交换时使内存变量与数据表记录同步
IncreaseCount();//计算已被处理的记录数
}
void CFmodbcsqlView::OnRecordLast()
{
// TODO: Add your command handler code here
m_pSet->MoveLast();
UpdateData(FALSE);
IncreaseCount();//计算已被处理的记录数
}
void CFmodbcsqlView::OnUpdateRecordFirst(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
//pCmdUI->Enable(!m_pSet->IsBOF());//可试着对比和下面语句的细微区别
pCmdUI->Enable(!IsOnFirstRecord());
}
void CFmodbcsqlView::OnUpdateRecordLast(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(!m_pSet->IsEOF());
}
void CFmodbcsqlView::OnUpdateRecordNext(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(!m_pSet->IsEOF());
}
void CFmodbcsqlView::OnUpdateRecordPrev(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
//pCmdUI->Enable(!m_pSet->IsBOF());//可试着对比和下面语句的细微区别
pCmdUI->Enable(!IsOnFirstRecord());
}
void CFmodbcsqlView::OnInsert()
{
//若连续两次以上单击本按钮,会造成基类对象的异常旁路,
//从而失去当前记录位置而无法删除本记录。因此建议此时单击任何移动按钮重新定位本记录再单击删除按钮。
// TODO: Add your control notification handler code here
m_pSet->AddNew();//向数据表插入新记录
m_pSet->m_Class_code=_T("9916888");
m_pSet->m_Name=_T("秦始皇");
m_pSet->m_Native_place=_T("火星");
m_pSet->m_Sex=_T("中");
CString student_number=_T("99999999");
m_pSet->m_Student_number=student_number;
UpdateData(FALSE);//在进行DDE交换时将内存变量值传向对话框文本编辑栏内
UpdateData(TRUE);//在进行DDE交换时将内存变量值传向数据表记录
m_pSet->Update();//回写当前记录数据
if(m_pSet->Requery())
{
m_pSet->MoveLast();
while(m_pSet->m_Student_number!=student_number&&!m_pSet->IsBOF())m_pSet->MovePrev();
UpdateData(FALSE);//在进行DDE交换时将内存变量值传向对话框文本编辑栏内
}
student_number.Empty();//避免造成CString对象的内存碎片
IncreaseCount();//计算已被处理的记录数
}
void CFmodbcsqlView::OnModify()
{
// TODO: Add your control notification handler code here
m_pSet->Edit();//进入修改编辑模式
UpdateData(TRUE);//在进行DDE交换时将内存变量值传向数据表记录
m_pSet->Update();//回写当前记录数据
IncreaseCount();//计算已被处理的记录数
}
void CFmodbcsqlView::OnDelete()
{
// TODO: Add your control notification handler code here
m_pSet->Delete();//删除当前记录
m_pSet->Move(-1);//记录指针回退一个位置
if(IsOnFirstRecord()||m_pSet->IsBOF())m_pSet->Move(1);
while(m_pSet->IsDeleted())m_pSet->Move(1);//若当前记录已被删除,则将记录指针向后定位到一个未删除记录处
if(m_pSet->Requery())m_pSet->Move(0);
UpdateData(FALSE);//在进行DDE交换时将内存变量值传向对话框文本编辑栏内
IncreaseCount();
}
void CFmodbcsqlView::IncreaseCount()
{
m_record_number=m_pSet->GetRecordCount();
UpdateData(FALSE);//在进行DDE交换时使内存变量与数据表记录同步
GetDlgItem(IDC_NAME)->SetFocus();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -