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

📄 odbcdemo5view.cpp

📁 MFC的Recordset类通过ODBC方式连接数据库
💻 CPP
字号:
// ODBCDemo5View.cpp : implementation of the CODBCDemo5View class
//

#include "stdafx.h"
#include "ODBCDemo5.h"

#include "ODBCDemo5Set.h"
#include "ODBCDemo5Doc.h"
#include "ODBCDemo5View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include "AddDlg.h"
#include "RequeryDlg.h"
#include "SortDlg.h"
/////////////////////////////////////////////////////////////////////////////
// CODBCDemo5View

IMPLEMENT_DYNCREATE(CODBCDemo5View, CRecordView)

BEGIN_MESSAGE_MAP(CODBCDemo5View, CRecordView)
	//{{AFX_MSG_MAP(CODBCDemo5View)
	ON_BN_CLICKED(IDC_SHOW_BUTTON, OnShowButton)
	ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
	ON_BN_CLICKED(IDC_BTN_DELETE, OnBtnDelete)
	ON_BN_CLICKED(IDC_BTN_MODIFY, OnBtnModify)
	ON_BN_CLICKED(IDC_BTN_REQUERY, OnBtnRequery)
	ON_BN_CLICKED(IDC_BTN_SORT, OnBtnSort)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CODBCDemo5View construction/destruction

CODBCDemo5View::CODBCDemo5View()
	: CRecordView(CODBCDemo5View::IDD)
{
	//{{AFX_DATA_INIT(CODBCDemo5View)
	m_pSet = NULL;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CODBCDemo5View::~CODBCDemo5View()
{
}

void CODBCDemo5View::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CODBCDemo5View)
	DDX_Control(pDX, IDC_RECORD_LIST, m_Record_List);
	//}}AFX_DATA_MAP
}

BOOL CODBCDemo5View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CRecordView::PreCreateWindow(cs);
}

void CODBCDemo5View::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_oDBCDemo5Set;
	CRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	//m_pSet->m_strFilter="出售价格=?";
	//m_pSet->m_price = 573;
	//m_pSet->m_strFilter="出售价格='90'";
	//m_pSet->m_strSort = "出售价格 desc";

//	m_pSet->m_strFilter.Format("出售价格=%ld", 573);
//	m_pSet->m_strFilter.Format("出售数量=%ld", 10);
//	m_pSet->Requery();
	
	m_pSet->Close();

//	m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE, "select 出售价格 from 出售信息");
//	m_pSet->Requery();
	m_Record_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	LV_COLUMN h;
	h.mask=LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
	h.fmt=LVCFMT_CENTER;
	h.cx=90;
	
	h.pszText="图书ID";
	m_Record_List.InsertColumn(0, &h);
	
	h.pszText="出售价格";
	m_Record_List.InsertColumn(1, &h);
	
	h.pszText="ISBN";
	m_Record_List.InsertColumn(2, &h);

	h.pszText="出售数量";
	m_Record_List.InsertColumn(3, &h);
	OnShowButton();
}

/////////////////////////////////////////////////////////////////////////////
// CODBCDemo5View printing

BOOL CODBCDemo5View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CODBCDemo5View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CODBCDemo5View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CODBCDemo5View diagnostics

#ifdef _DEBUG
void CODBCDemo5View::AssertValid() const
{
	CRecordView::AssertValid();
}

void CODBCDemo5View::Dump(CDumpContext& dc) const
{
	CRecordView::Dump(dc);
}

CODBCDemo5Doc* CODBCDemo5View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CODBCDemo5Doc)));
	return (CODBCDemo5Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CODBCDemo5View database support
CRecordset* CODBCDemo5View::OnGetRecordset()
{
	return m_pSet;
}


/////////////////////////////////////////////////////////////////////////////
// CODBCDemo5View message handlers

void CODBCDemo5View::OnShowButton() 
{
	// TODO: Add your control notification handler code here
	m_Record_List.DeleteAllItems();
	CString s;
	i = 0;

	//m_pSet->m_strFilter.Format("出售价格=%ld", 22);
	//m_pSet->Requery();

	m_pSet->MoveFirst();

/*	while(m_Record_List.DeleteColumn(0));
	LV_COLUMN h;
	h.mask=LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
	h.fmt=LVCFMT_CENTER;
	h.cx=90;
	h.pszText="图书ID";
	m_Record_List.InsertColumn(0, &h);*/
	while(!m_pSet->IsEOF())
	{
		//if(m_pSet->m___ID==1)
		//{
		s.Format("%ld", m_pSet->m___ID);
		m_Record_List.InsertItem(i, s);
		s.Format("%ld", m_pSet->m_column1);
		m_Record_List.SetItemText(i, 1, s);
		m_Record_List.SetItemText(i, 2, m_pSet->m_ISBN);
		s.Format("%ld", m_pSet->m_column2);
		m_Record_List.SetItemText(i, 3, s);
		//break;
		//}
		m_pSet->MoveNext();
		i++;
	}
}

void CODBCDemo5View::OnBtnAdd() 
{
	// TODO: Add your control notification handler code here
	CAddDlg dlg;
	CString s;
	if(IDOK == dlg.DoModal())
	{
		m_pSet->AddNew();
		m_pSet->m___ID = atol(dlg.m_id);
		m_pSet->m_column1 = atol(dlg.m_Price);
		m_pSet->m_ISBN = dlg.m_ISBN;
		m_pSet->m_column2 = atol(dlg.m_sum);

		s.Format("%d", m_pSet->m___ID);
		m_Record_List.InsertItem(i, s);
		s.Format("%d", m_pSet->m_column1);
		m_Record_List.SetItemText(i, 1, s);
		m_Record_List.SetItemText(i, 2, m_pSet->m_ISBN);
		s.Format("%d", m_pSet->m_column2);
		m_Record_List.SetItemText(i, 3, s);
			
		m_pSet->Update();
		i++;
	}
}

void CODBCDemo5View::OnBtnDelete() 
{
	// TODO: Add your control notification handler code here
	CString s;
	m_pSet->MoveFirst();
	int index = m_Record_List.GetNextItem(-1, LVNI_SELECTED);
	if(index != -1)
	{
		while(!m_pSet->IsEOF())
		{
			s.Format("%ld", m_pSet->m___ID);
			if(s == m_Record_List.GetItemText(index, 0))
			{	
				m_pSet->Delete();
				i--;
			}
			m_pSet->MoveNext();
		}
		MessageBox("记录已经删除!");
		m_Record_List.DeleteItem(index);
	}
	else
	{
		MessageBox("请选中要删除的记录!");
	}
}

void CODBCDemo5View::OnBtnModify() 
{
	// TODO: Add your control notification handler code here
	CString s;
	int j = 0;
	CAddDlg dlg;
	m_pSet->MoveFirst();
	int index = m_Record_List.GetNextItem(-1, LVNI_SELECTED);
	if(index != -1)
	{
		dlg.m_id = m_Record_List.GetItemText(index, 0);
		dlg.m_Price = m_Record_List.GetItemText(index, 1);
		dlg.m_ISBN = m_Record_List.GetItemText(index, 2);
		dlg.m_sum = m_Record_List.GetItemText(index, 3);

		if(IDOK == dlg.DoModal())
		{
			while(!m_pSet->IsEOF())
			{
				if(m_pSet->m___ID == atol(dlg.m_id))
				{
					m_pSet->Edit();
					m_pSet->m___ID = atol(dlg.m_id);
					m_pSet->m_column1 = atol(dlg.m_Price);
					m_pSet->m_ISBN = dlg.m_ISBN;
					m_pSet->m_column2 = atol(dlg.m_sum);
					m_pSet->Update();

					MessageBox("记录已经修改!");
					m_Record_List.DeleteItem(j);
					s.Format("%ld", m_pSet->m___ID);
					m_Record_List.InsertItem(j, s);
					s.Format("%ld", m_pSet->m_column1);
					m_Record_List.SetItemText(j, 1, s);
					m_Record_List.SetItemText(j, 2, m_pSet->m_ISBN);
					s.Format("%ld", m_pSet->m_column2);
					m_Record_List.SetItemText(j, 3, s);
					break;
				}
				else
				{
					j++;
					m_pSet->MoveNext();
				}
			}
		}
	}
	else
	{
		MessageBox("请选中要修改的记录!");
	}
}

void CODBCDemo5View::OnBtnRequery() 
{
	// TODO: Add your control notification handler code here
	CString s;
	RequeryDlg dlg;
	BOOL b = FALSE;
	int j = 0;
	m_pSet->MoveFirst();
	if(IDOK == dlg.DoModal())
	{
		m_Record_List.DeleteAllItems();
		while(!m_pSet->IsEOF())
		{
			if(m_pSet->m___ID == dlg.m_RequeryName)
			{
				
				s.Format("%ld", m_pSet->m___ID);
				m_Record_List.InsertItem(j, s);
				s.Format("%ld", m_pSet->m_column1);
				m_Record_List.SetItemText(j, 1, s);
				m_Record_List.SetItemText(j, 2, m_pSet->m_ISBN);
				s.Format("%ld", m_pSet->m_column2);
				m_Record_List.SetItemText(j, 3, s);
				j++;
			}
			m_pSet->MoveNext();
		}
		if(!j)
			MessageBox("你所要的记录不存在!");
	}
}

void CODBCDemo5View::OnBtnSort() 
{
	// TODO: Add your control notification handler code here
	CSortDlg dlg;
	if(IDOK == dlg.DoModal())
	{
		m_Record_List.DeleteAllItems();
		m_pSet->m_strSort = dlg.m_GetString;
		m_pSet->Requery();//重新建立记录集时使用 
		OnShowButton();
	}
}

void CODBCDemo5View::OnDraw(CDC* pDC) 
{
	// TODO: Add your specialized code here and/or call the base class
	CODBCDemo5Doc *pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
	MemDC.SelectObject(pDoc->m_Bitmap);
	pDC->BitBlt(0, 0, pDoc->m_nWidth, pDoc->m_nHeight, &MemDC, 0, 50, SRCCOPY);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -