⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmodbcsqlview.cpp

📁 本例要使用的ODBC数据源名为LocalServer
💻 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 + -