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

📄 adodialog.cpp

📁 vc++6.0数据库编程大全一书得各个章节得源码,比较详细.可以仔细参照学习!
💻 CPP
字号:
// ADODialog.cpp : Implementtion of CADODialog
#include "stdafx.h"
#include "ADODialog.h"
/////////////////////////////////////////////////////////////////////////////
// CADODialog

HRESULT CADODialog::OpenConnection() {
    CComBSTR bstrODBCDatabase = m_strODBCDatabase;
	CComBSTR bstrUserId = m_strUserID;
	CComBSTR bstrPassword = m_strPassword;

	//Create new connection
	CoCreateInstance(CLSID_CADOConnection, NULL, 
		CLSCTX_INPROC_SERVER, IID_IADOConnection, 
		(LPVOID *)&m_ADOConn);
	//Use the connection to open a link to database
	HRESULT hr = m_ADOConn->Open(
		bstrODBCDatabase, 
		bstrUserId,
		bstrPassword,
		adOpenUnspecified);
	if (FAILED(hr)) {
		COLEDBErrorChecking::DisplaySingleError(hr, 
			"OpenConnection");
		m_ADOConn = NULL;
	}
	return hr;
}

void CADODialog::CloseConnection() {
	if (m_ADOConn != NULL ) {
		//Close the connection
		m_ADOConn->Close();
		m_ADOConn = NULL;
	}
}

HRESULT CADODialog::OpenRecordset() {
//Form an SQL statement from the table
	CComBSTR bstrSQL = "SELECT * FROM ";
	bstrSQL += m_strDBTable;
//Allocate a new ADORecordset variable
	CoCreateInstance(CLSID_CADORecordset, NULL, 
		CLSCTX_INPROC_SERVER, IID_IADORecordset, 
		(LPVOID *)&m_pSet);
//Open the newly formed recordset with the SQL
//and the connection
	HRESULT hr = m_pSet->Open(
		CComVariant(bstrSQL),
		CComVariant(m_ADOConn), 
		adOpenKeyset, adLockOptimistic, adCmdText);
	if (FAILED(hr)) {
		COLEDBErrorChecking::DisplaySingleError(hr, 
			"OpenRecordset");
		m_pSet = NULL;
	}
	else {
		//Everything worked.  Move to the first record.
		ADOMove(FIRST, FALSE);
	}
	return hr;
}

void CADODialog::CloseRecordset() {
	if (m_pSet != NULL ) {
		//Close recordset 
		m_pSet->Close();
		m_pSet = NULL;
	}
}

void CADODialog::ExecuteSQL(char *SQL) {
	CComBSTR bstrSQL = SQL;
	//Execute an SQL string
	HRESULT hr = m_ADOConn->Execute(
		bstrSQL,	//Source statement
		NULL,		//VARIANT records Affected
        adOptionUnspecified, //Options -- Usually leave unspecified
		NULL);		//ADORecordset results;
	if (FAILED(hr)) {
		COLEDBErrorChecking::DisplaySingleError(hr, 
			"Execute SQL");
	}
}

void CADODialog::UpdateData(BOOL bSaveChangesToSet) {
	HRESULT hr;
	if (bSaveChangesToSet) {
		//Read From Screen
		GetDlgItemText(IDC_CODE, m_DepartmentCode, 5);
		GetDlgItemText(IDC_NAME, m_DepartmentName, 51);
		//Place data in database fields
		hr = SetFields();
		if (FAILED(hr)) {
			COLEDBErrorChecking::DisplaySingleError(hr, "SaveDepartment SetFields");
		}
	}
	else {
		//Write to Screen
		//Take data from database fields
		hr = GetFields();	
		if (FAILED(hr)) {
			COLEDBErrorChecking::DisplaySingleError(hr, "OnMove GetFields");
			DisplayStatus("No records found.");
		}
		SetDlgItemText(IDC_CODE, m_DepartmentCode);
		SetDlgItemText(IDC_NAME, m_DepartmentName);
	}
}

HRESULT CADODialog::SaveChanges() {
	UpdateData(TRUE);	//Read from screen
	//Update database from fields
	HRESULT hr = m_pSet->Update(m_varNoVariant, m_varNoVariant);
	if (FAILED(hr)) {
		COLEDBErrorChecking::DisplaySingleError(hr, "SaveDepartment Update");
	}
	return hr;
}

void CADODialog::DisplayStatus(char *strMessage)
{
	//Send a message to the status line in the dialog box
	SetDlgItemText(IDC_STATUS, strMessage);
}

void CADODialog::ADOMove(ADOMoveEnum position, BOOL SaveFirst) {
	//This function is called by other move functions
	HRESULT hr;
	VARIANT_BOOL vb;
	if (SaveFirst) {
//Don't save deleted records or on your first time through
		hr = SaveChanges();	//Save changes
		if (FAILED(hr)) {
			DisplayStatus("Save failed.  Can't move off this record.");
			return;		//End if save did not work.
		}
	}
	DisplayStatus("");
	switch (position) {
		case (FIRST) :	//first record
			hr = m_pSet->MoveFirst();
			break;
		case (NEXT) :	//next record
			hr = m_pSet->MoveNext();
			m_pSet->get_EOF(&vb);
			if (vb) {
				//EOF.  No more records
				DisplayStatus("Last record reached.");
				hr = m_pSet->MoveLast();
			}
			break;
		case (LAST) :	//last record
			hr = m_pSet->MoveLast();
			break;
		case (PREV) :	//previous record
			hr = m_pSet->MovePrevious();
			m_pSet->get_BOF(&vb);
			if (vb) {
				//BOF.  No previous records
				DisplayStatus("First record reached.");
				hr = m_pSet->MoveFirst();
			}
			break;
	}
	if (FAILED(hr)) {
		COLEDBErrorChecking::DisplaySingleError(hr, "OnMove Move");
		DisplayStatus("No records found.");
		return;
	}
	UpdateData(FALSE);	//Update Screen
}

HRESULT CADODialog::GetFields() {
	CComPtr<ADOFields> pFields = NULL;	//Fields Container
	CComPtr<ADOField> pDeptCode = NULL;	//Individual Field
	CComPtr<ADOField> pDeptName = NULL;	//Individual Field
	CComVariant varValue; // Variant set to zero
//Get all the fields in the Fields container
	HRESULT hr = m_pSet->get_Fields(&pFields);
	if (FAILED(hr)) return hr;
//Get the DepartmentCode Field (Field 0)
	hr = pFields->get_Item(CComVariant(0), &pDeptCode);
	if (FAILED(hr)) return hr;
//Get the value of the DepartmentCode field
	hr = pDeptCode->get_Value(&varValue);
	if (FAILED(hr)) return hr;
//Assign Variant to Department Code
	sprintf(m_DepartmentCode, "%S", varValue.bstrVal);
//Get the DepartmentName Field (Field 1)
	hr = pFields->get_Item(CComVariant(1), &pDeptName);
	if (FAILED(hr)) return hr;
//Get the value of the DepartmentName field
	hr = pDeptName->get_Value(&varValue);
	if (FAILED(hr)) return hr;
//Assign Variant to Department Name
	sprintf(m_DepartmentName, "%S", varValue.bstrVal);
	return hr;
}

HRESULT CADODialog::SetFields() {
	CComPtr<ADOFields> pFields = NULL;
	CComPtr<ADOField> pDeptCode = NULL;	//Individual Field
	CComPtr<ADOField> pDeptName = NULL;	//Individual Field

//Get all the fields
	HRESULT hr = m_pSet->get_Fields(&pFields);
	if (FAILED(hr)) return hr;

//Get the DepartmentCode Field (Field 0)
	hr = pFields->get_Item(CComVariant(0), &pDeptCode);
	if (FAILED(hr)) return hr;
//Set the value of the DepartmentCode field
	hr = pDeptCode->put_Value(CComVariant(m_DepartmentCode));
	if (FAILED(hr)) return hr;

//Get the DepartmentName Field (Field 1)
	hr = pFields->get_Item(CComVariant(1), &pDeptName);
	if (FAILED(hr)) return hr;
//Set the value of the DepartmentName field
	return pDeptName->put_Value(CComVariant(m_DepartmentName));
}

⌨️ 快捷键说明

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