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

📄 dbaccess.h

📁 以SQL语句从数据库里查询出记录
💻 H
字号:
//ado support section.
#ifndef USING_COM
#define USING_COM
#endif
#define INI_SETTING_FILE "settings.ini"

#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ADO\msado15.dll"\
	no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")

//init system section.
class InitSystem {
public:
	InitSystem(){
#ifdef USING_COM
		CoInitialize(NULL);
#endif
	}
	~InitSystem(){
#ifdef USING_COM
		CoUninitialize();
#endif
	}
private:
};


BOOL StringToDate(CString str, COleDateTime &t);

class ConnectStruct{
public:
	char szServer[80];
	char szCatalog[120];
	char szUser[80];
	char szPwd[80];
	char m_szConnection[1000];
	
	ConnectStruct(void){
		memset(szServer, 0, 80*sizeof(char));
		memset(szCatalog, 0, 120*sizeof(char));
		memset(szUser, 0, 80*sizeof(char));
		memset(szPwd, 0, 80*sizeof(char));
		memset(m_szConnection,0,1000*sizeof(char));
		
		char bufModuleFile[MAX_PATH];
		memset(bufModuleFile,0,MAX_PATH*sizeof(char));
		GetModuleFileName(NULL,bufModuleFile,MAX_PATH);

		for(int i=strlen(bufModuleFile);i>0;i--){
			if(bufModuleFile[i-1]=='\\'){
				memset(bufModuleFile+i,0,(strlen(bufModuleFile)-i)*sizeof(char));
				break;
			}
		}
			
		strcat(bufModuleFile,INI_SETTING_FILE);
		char szTemp[400];
		
		memset(szTemp,0,400*sizeof(char));
		GetPrivateProfileString("datasource","server_type","ORACLE",szTemp,400,bufModuleFile);
		CString strServerType = _T(szTemp);

		memset(szTemp,0,400*sizeof(char));
		GetPrivateProfileString("datasource","server",".",szTemp,400,bufModuleFile);
		memcpy(szServer,szTemp,80);
		
		memset(szTemp,0,400*sizeof(char));
		GetPrivateProfileString("datasource","database","test",szTemp,400,bufModuleFile);
		memcpy(szCatalog,szTemp,120);
		
		memset(szTemp,0,400*sizeof(char));
		GetPrivateProfileString("datasource","user","test",szTemp,400,bufModuleFile);
		memcpy(szUser,szTemp,80);
		
		memset(szTemp,0,400*sizeof(char));
		GetPrivateProfileString("datasource","password","test",szTemp,400,bufModuleFile);
		memcpy(szPwd,szTemp,80);
		
		if(strServerType==_T("SQLSERVER"))
			sprintf(m_szConnection,"Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s",
			szServer,szCatalog,szUser,szPwd);
		else if(strServerType==_T("ORACLE"))
			sprintf(m_szConnection,"Provider=OraOLEDB.Oracle.1;Data Source=%s;User ID=%s;Password=%s;\
Persist Security Info=True;Extended Properties=\"\"",
			szCatalog,szUser,szPwd);
	}
};

#include "adodb.h"

// 依据给定查询语句,把查询结果写在ListCtrl控件里面
#define RECORD_TO_LISTCTRL(sql, listctrl) { \
CAdoDb *ado = GetAdoDb(); FreshList(ado->GetConnection(), sql, &listctrl); \
}

// 把数据设置到编辑控件。
// 参数说明:ctrl为控件ID数组
// 注意:数组ctrl大小必须和value一致
#define VALUE_TO_EDIT(value) {\
long lCount = value.GetSize(); \
	for (long i = 0; i < lCount; i++) { \
		CWnd *pWnd = GetDlgItem(m_nControlID[i]);\
		char lpClassName[255];\
		::GetClassName(pWnd->GetSafeHwnd(), lpClassName, 255); \
		CString str = lpClassName;\
		if (str == "SysDateTimePick32") {	\
			CDateTimeCtrl *date = (CDateTimeCtrl*)pWnd;\
			COleDateTime t;\
			if (StringToDate(value.GetAt(i), t))\
			date->SetTime(t);\
		}\
		else if (str == "Button") {		\
			CButton *button = (CButton*)pWnd;\
			button->SetCheck(atol(value.GetAt(i)));\
		}\
		else if (str == "ComboBox") {	\
			CString strCmb;\
			CComboBox *cmbox = (CComboBox*)pWnd;\
			long lCmbCount = cmbox->GetCount();\
			for (long j = 0; j < lCmbCount; j++) {\
				cmbox->GetLBText(j, strCmb);\
				if (strCmb == value.GetAt(i)) {\
					cmbox->SetCurSel(j);\
					break;\
				}\
			}\
		}\
		else\
			SetDlgItemText(m_nControlID[i], value.GetAt(i)); \
	}\
}

#define VALUE_TO_EDIT_EX(value, control) {\
long lCount = value.GetSize(); \
	for (long i = 0; i < lCount; i++) { \
		CWnd *pWnd = GetDlgItem(control[i]);\
		char lpClassName[255];\
		::GetClassName(pWnd->GetSafeHwnd(), lpClassName, 255); \
		CString str = lpClassName;\
		if (str == "SysDateTimePick32") {	\
			CDateTimeCtrl *date = (CDateTimeCtrl*)pWnd;\
			COleDateTime t;\
			if (StringToDate(value.GetAt(i), t))\
			date->SetTime(t);\
		}\
		else if (str == "Button") {		\
			CButton *button = (CButton*)pWnd;\
			button->SetCheck(atol(value.GetAt(i)));\
		}\
		else if (str == "ComboBox") {	\
			CString strCmb;\
			CComboBox *cmbox = (CComboBox*)pWnd;\
			long lCmbCount = cmbox->GetCount();\
			for (long j = 0; j < lCmbCount; j++) {\
				cmbox->GetLBText(j, strCmb);\
				if (strCmb == value.GetAt(i)) {\
					cmbox->SetCurSel(j);\
					break;\
				}\
			}\
		}\
		else\
			SetDlgItemText(control[i], value.GetAt(i)); \
	}\
}

// 从编辑控件里面提取数据
// 参数说明:num编辑控件数组的大小
#define VALUE_FROM_EDIT(num, value) { \
value.RemoveAll(); CString str; \
for (long i = 0; i < num; i++) { \
CWnd *pWnd = GetDlgItem(m_nControlID[i]);\
char lpClassName[255];\
::GetClassName(pWnd->GetSafeHwnd(), lpClassName, 255); \
CString str = lpClassName;\
if (str == "Button") {\
CButton *button = (CButton*)pWnd;\
if (0 == button->GetCheck()) value.Add("0");\
else value.Add("1");}\
else {GetDlgItemText(m_nControlID[i], str); value.Add(str); }\
}}

#define VALUE_FROM_EDIT_EX(num, value, control) { \
value.RemoveAll(); CString str; \
for (long i = 0; i < num; i++) { \
CWnd *pWnd = GetDlgItem(control[i]);\
char lpClassName[255];\
::GetClassName(pWnd->GetSafeHwnd(), lpClassName, 255); \
CString str = lpClassName;\
if (str == "Button") {\
CButton *button = (CButton*)pWnd;\
if (0 == button->GetCheck()) value.Add("0");\
else value.Add("1");}\
else {GetDlgItemText(control[i], str); value.Add(str); }\
}}

// 从数据库记录里面提取数据。
#define GET_RECORD_DATA(SQL, value0, value1) GetAdoDb()->GetRecordValues(SQL, value0, value1);
#define GET_RECORD_DATA_EX(SQL, index, value0, value1) GetAdoDb()->GetRecordValues(SQL, index, value0, value1);

// 修改数据
#define AMEND_RECORD_DATA(SQL, value) {\
 if (GetAdoDb()->AmendRecordValues(SQL, value))	 AfxMessageBox("更新成功");\
 else	 AfxMessageBox("更新失败"); }

// 增加数据
#define ADD_RECORD_DATA(SQL, value) GetAdoDb()->AddRecordValues(SQL, value);

// 删除数据
#define DELETE_RECORD_DATA(SQL) GetAdoDb()->DeleteRecordValues(SQL);

// 下面定义用于数据选择的标志变量。
#define NORMALIZER		0		// 一般情况。可以输入新的数据,同时添加进数据库里面去。
#define RRADONLY		1		// 只能从数据库里面得到数据
#define NEWNOADD		2		// 可以得到新数据,但是不添加到数据库里面

// 设置数据
#define SETDATAFROMDATABASE(sql, id, type) { \
CDialogSelectItem dlg;\
dlg.m_strSQL = sql; dlg.m_lDataType = type;\
if (dlg.DoModal() == IDOK)\
		SetDlgItemText(id, dlg.m_strData);\
}


#define GETOTHERRECORDSQL(sql, condition, sql0) { \
CDialogOtherRecordset dlg;\
dlg.m_pArrData = &condition;\
dlg.m_strSQL = sql;\
if (IDOK != dlg.DoModal())\
	return; sql0 = dlg.m_strConditionSQL;\
}

// 把一个数组里面的数据填写在ListBox控件里面去
#define SETDATATOLISTBOX(listbox, arrdata) { \
listbox.ResetContent();\
long lItemCount = arrdata.GetSize();\
for (long i = 1; i < lItemCount; i++) {\
	listbox.AddString(arrdata.GetAt(i));\
}}

// 该宏是获得物料编号和物料名称,把得到的数据设置到
// 参数ID指定的EDIT控件里面
#define SET_BIANHAO_MINGCHENG(bianhao, mingcheng) {\
	CDialogSelectItemEx dlg; \
	if (IDOK != dlg.DoModal()) \
		return; \
	SetDlgItemText(bianhao, dlg.m_strBianhao); \
	SetDlgItemText(mingcheng, dlg.m_strMingcheng); \
}

⌨️ 快捷键说明

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