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

📄 dbasedatasql.cpp

📁 在EVC中使用SQLCE数据库的例子
💻 CPP
字号:
// DBaseDataSql.cpp : implementation file
//

#include "stdafx.h"
#include "SqlCeExaple.h"
#include "DBaseDataSql.h"
#include "vorecordset.h"
#include "DBManager.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDBaseDataSql dialog

  CVOConnection* m_Conn;//数据源对象指针


CDBaseDataSql::CDBaseDataSql(CWnd* pParent /*=NULL*/)
	: CDialog(CDBaseDataSql::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDBaseDataSql)
	m_nNum = 1;
	m_sName = _T("");
	m_nAge = 0;
	//}}AFX_DATA_INIT
}


void CDBaseDataSql::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDBaseDataSql)
	DDX_Control(pDX, IDC_LIST1, m_List);
	DDX_Control(pDX, IDC_BTN_MOD, m_btnMod);
	DDX_Control(pDX, IDC_BTN_DEL, m_btnDel);
	DDX_Control(pDX, IDC_BTN_ADD, m_btnAdd);
	DDX_Text(pDX, IDC_EDIT2, m_nNum);
	DDX_Text(pDX, IDC_EDIT3, m_sName);
	DDX_Text(pDX, IDC_EDIT4, m_nAge);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDBaseDataSql, CDialog)
	//{{AFX_MSG_MAP(CDBaseDataSql)
	ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
	ON_BN_CLICKED(IDC_BTN_MOD, OnBtnMod)
	ON_BN_CLICKED(IDC_BTN_DEL, OnBtnDel)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDBaseDataSql message handlers

BOOL CDBaseDataSql::OnInitDialog() 
{
	CDialog::OnInitDialog();
//	RegDll();
	HRESULT hr = S_OK;

	m_Conn = new CVOConnection();
	m_pRecordSet = new CVORecordset(*m_Conn);
	db.m_pRecordSet = m_pRecordSet;
	CString sql = L"select * from student";
	hr = db.m_pRecordSet->Open(sql);
	InitList();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDBaseDataSql::InitList()
{
	m_ImageList.Create(16,16,ILC_COLOR,2,2);
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
	m_List.SetImageList(&m_ImageList,LVSIL_SMALL);

	 m_font.CreateFont(12,0,0,0,FW_NORMAL, 0,0,0,
		DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_CHARACTER_PRECIS,
		DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"宋体");
	m_List.SetFont(&m_font);
	m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

		m_List.InsertColumn(0,_T("序列号"));		
		m_List.InsertColumn(1,_T("姓名"));
		m_List.InsertColumn(2,_T("年龄"));
		m_List.SetColumnWidth(0,60);
		m_List.SetColumnWidth(1,80);
		m_List.SetColumnWidth(2,40);

	m_font.DeleteObject();
	m_ImageList.DeleteImageList();
	FillList();
}

void CDBaseDataSql::FillList()
{
	m_List.DeleteAllItems();
	CVORecordset m_pRecordSet(*m_Conn);
	DBManager db;
	db.m_pRecordSet = &m_pRecordSet;
	CString sql = _T("select * from student");
	db.m_pRecordSet->Open(sql);

	db.FindFirstItem();

//	m_List.InsertItem(0,0);
//	CString temp;
//	temp.Format(L"%d",db.dbnum);
//	m_List.SetItemText(0,0,temp);
//	temp.Format(L"%d",db.dbage);
//	m_List.SetItemText(0,2,temp);
//	m_List.SetItemText(0,1,db.dbname);


	int nRow=0;
	while(!db.m_pRecordSet->IsEOF())
	{
		m_List.InsertItem(nRow,0);
		CString temp;
		temp.Format(L"%d",db.dbnum);
		m_List.SetItemText(nRow,0,temp);
		temp.Format(L"%d",db.dbage);
		m_List.SetItemText(nRow,2,temp);
		m_List.SetItemText(nRow,1,db.dbname);
		db.FindNextItem();
		nRow++;
	}
}

void CDBaseDataSql::OnBtnAdd() 
{
	// TODO: Add your control notification handler code here
	CVORecordset m_pRecordSet(*m_Conn);
	DBManager db;
	db.m_pRecordSet = &m_pRecordSet;
	CString sql = _T("select * from student");
	db.m_pRecordSet->Open(sql);

	UpdateData();
	if (m_nNum <= 0)
	{
		MessageBox(L"input a Number",L"提示",MB_OK);
		return;
	}
	if (m_sName == L"")
	{
		MessageBox(L"input student name",L"提示",MB_OK);
		return;
	}
	db.Add(m_nNum,m_sName,m_nAge);
	CString temp;
	int pos = m_List.GetItemCount();
	m_List.InsertItem(pos,0);
	temp.Format(L"%d",m_nNum);
	m_List.SetItemText(pos,0,temp);
	m_List.SetItemText(pos,1,m_sName);
	temp.Format(L"%d",m_nAge);
	
	m_List.SetItemText(pos,2,temp);
	
	m_List.SetSelectionMark(pos);

	 OrderList();

	UpdateData(FALSE);
	

	
}

void CDBaseDataSql::OnBtnMod() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	DBManager db;
	db.Mod(m_nNum,m_sName,m_nAge);
	UpdateData(FALSE);
}

void CDBaseDataSql::OnBtnDel() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	int nSel;
	CVORecordset m_pRecordSet(*m_Conn);
	DBManager db;
	db.m_pRecordSet = &m_pRecordSet;
	CString sql = L"select * from student";
	
	if(m_List.GetSelectionMark() < 0)
	{
		MessageBox(L"请选择一个要删除的项!",L"系统提示",MB_ICONASTERISK);
		return;
	}
	
	nSel = m_List.GetSelectionMark();
	db.m_pRecordSet->Open(sql);

	db.Del(_wtoi(m_List.GetItemText(nSel,0)));
	m_List.DeleteAllItems();
	FillList();
	OrderList();
}

void CDBaseDataSql::OnCancel() 
{
	// TODO: Add extra cleanup here
	if(m_Conn)
	{
		delete m_Conn;
	}
	
	CDialog::OnCancel();
}

void CDBaseDataSql::OrderList()
{
	int i,j;
	int total=m_List.GetItemCount();
	for(i=0;i<total;i++)
	{
		bool bIfChanged=false;
		int min=_wtoi(m_List.GetItemText(i,0));
		int minRow=i;
		for(j=i+1;j<total;j++)
		{
			if(_wtoi(m_List.GetItemText(j,0))<min)
			{
				min=_wtoi(m_List.GetItemText(j,0));
				minRow=j;
				bIfChanged=true;
			}
		}
		if(!bIfChanged)
			continue;
		m_List.InsertItem(i,0);
		m_List.SetItemText(i,0,m_List.GetItemText(minRow+1,0));
		m_List.SetItemText(i,1,m_List.GetItemText(minRow+1,1));
		m_List.SetItemText(i,2,m_List.GetItemText(minRow+1,2));
		
		m_List.DeleteItem(minRow+1);
	}

}

BOOL CDBaseDataSql::RegisterOCX(CString pszDllName)
{

	HINSTANCE hLib = LoadLibrary(pszDllName);
    if (hLib < (HINSTANCE)32)
    {
		return FALSE;
	}
//	HRESULT hResult = OleInitialize(NULL);
//	if(hResult != S_OK)
//	{
//	::FreeLibrary(hLib);
//	return FALSE;
//	}
	FARPROC lpDllEntryPoint; 
	lpDllEntryPoint = GetProcAddress(hLib,_T("DllRegisterServer"));
	if(lpDllEntryPoint!=NULL)
	{
		if(FAILED((*lpDllEntryPoint)()))
		{
			FreeLibrary(hLib);
			return FALSE;
		};
	}
	else
	{
		return FALSE;
	}
	return TRUE;

}

void CDBaseDataSql::RegDll()
{
	CString pathSrc[13],pathDes[13];

	pathSrc[0] = L"\\Storage Card\\dll\\adoce31.dll";
	pathSrc[1] = L"\\Storage Card\\dll\\adoxce31.dll";
	pathSrc[2] = L"\\Storage Card\\dll\\msdaer.dll";
	pathSrc[3] = L"\\Storage Card\\dll\\msdaosp.dll";
	pathSrc[4] = L"\\Storage Card\\dll\\ssce20.dll";
	pathSrc[5] = L"\\Storage Card\\dll\\ssceca20.dll";
	pathSrc[6] = L"\\Storage Card\\dll\\ssceerror20en.dll";
	

	pathSrc[7] = L"\\Storage Card\\dll\\msdaeren.dll";
	pathSrc[8] = L"\\Storage Card\\dll\\msdaeres.dll";
	pathSrc[9] = L"\\Storage Card\\dll\\msdaerde.dll";
	pathSrc[10] = L"\\Storage Card\\dll\\adocedb31.dll";
	pathSrc[11] = L"\\Storage Card\\dll\\adoceoledb31.dll";
	pathSrc[12] = L"\\Storage Card\\DataBase\\student.sdf";


	pathDes[0] = L"\\Windows\\adoce31.dll";
	pathDes[1] = L"\\Windows\\adoxce31.dll";
	pathDes[2] = L"\\Windows\\msdaer.dll";
	pathDes[3] = L"\\Windows\\msdaosp.dll";
	pathDes[4] = L"\\Windows\\ssce20.dll";
	pathDes[5] = L"\\Windows\\ssceca20.dll";
	pathDes[6] = L"\\Windows\\ssceerror20en.dll";


	pathDes[7] = L"\\Windows\\msdaeren.dll";
	pathDes[8] = L"\\Windows\\msdaeres.dll";
	pathDes[9] = L"\\Windows\\msdaerde.dll";
	pathDes[10] = L"\\Windows\\adocedb31.dll";
	pathDes[11] = L"\\Windows\\adoceoledb31.dll";

	pathDes[12] = L"\\My Documents\\student.sdf";
	
	BOOL bReturn = TRUE;
	int i = 0;

	try
	{
//		int i;	//考贝文件
		for( i = 0; i < 12; i++)
		{
			bReturn = bReturn&&::CopyFile(pathSrc[i], pathDes[i], FALSE);
		}
		CopyFile(pathSrc[12],pathDes[12],TRUE);
	}
	catch(...)
	{
		bReturn=FALSE;
	}

	if(bReturn)
	{
//		MessageBox(L"文件拷贝成功!",L"系统提示!",MB_OK);
		int i;
		BOOL aa =0;	//注册文件
		for( i = 0; i < 6; i++)
		{
			 aa = RegisterOCX(pathDes[i]);
		}
	}
	else
	{
		MessageBox(L"文件拷贝失败!",L"系统提示!",MB_OK); 
	}

}

⌨️ 快捷键说明

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