📄 dbaccess.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 + -