📄 common.cpp
字号:
/////////////////////////////////////////////////////////////
////该模块定义系统通用函数
////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Common.h"
#include "resource.h"
extern _ConnectionPtr g_pCN;
extern _RecordsetPtr g_pRS;
/*************************************************************************
* 功 能: 显示系统错误
* 参 数: nErrNumber :定义错误号
* strErr. :错误信息片段
* 返回值: 无
*
*************************************************************************/
void ShowError(int nErrNumber, CString strErr0, CString strErr1 , CString strErr2, CString strErr3)
{
CString strError, strTitle;
switch(nErrNumber)
{
//数据库定义错误
case ERROR_DDL: //不能连接到master
strError = "连接主数据库失败!";
break;
case ERROR_DDL + 1: //不能连接到其他数据库
strError = "连接数据库" + strErr0 + "失败!";
break;
case ERROR_DDL + 2:
strError = strErr0;
break;
case ERROR_DDL + 3:
strError = "系统中没有任何用户数据库被创建!";
break;
case ERROR_DDL + 4:
strError = "没有备份文件被选中!";
break;
case ERROR_DDL + 5:
strError = "没有脚本文件被选中!";
break;
//数据库操作错误
case ERROR_DML: //
strError = strErr0;
break;
case ERROR_DML + 1: //
strError = "删除用户“" + strErr0 + "”失败!";
break;
case ERROR_DML + 2: //
strError = "无权使用该命令!" ;
break;
//系统其他错误
case ERROR_COMM: //创建数据库例程产生的错误
strError = "创建ADO例程错误!";
break;
case ERROR_COMM + 1: //系统登录时错误
strError = "用户名或口令错!";
break;
case ERROR_COMM + 2:
strError = "用户登录失败!";
break;
case ERROR_COMM + 3:
strError = "读取用户信息失败!";
break;
case ERROR_COMM + 4:
strError = "用户名为1到16个字符!";
break;
case ERROR_COMM + 5:
strError = "用户口令为6到32个字符!";
break;
case ERROR_COMM + 6:
strError = "口令不一致!";
break;
case ERROR_COMM + 7:
strError = strErr0 + "已修改,尚未保存。\n\r先按“应用”按钮保存!";
break;
case ERROR_COMM + 8:
strError = "没有输入查询条件!";
break;
case ERROR_COMM + 9:
strError = "数据类型没有定义,类型号码-- " + strErr0;
break;
case ERROR_COMM + 10:
strError = "没有查询列被选中!";
break;
case ERROR_COMM + 11:
strError = "没有输入查询值!";
break;
case ERROR_COMM + 12:
strError = strErr0;
break;
case ERROR_COMM + 13:
strError = "没有比较操作符被选中!";
break;
case ERROR_COMM + 14:
strError = "没有输入有效的查询条件!";
break;
case ERROR_COMM + 15:
strError = "没有查询输入!";
break;
case ERROR_COMM + 16:
strError = " 没有选中要编辑的表!";
break;
default:
strError = "没有定义的错误!";
break;
}
strTitle.Format("#%d", nErrNumber);
MessageBox(NULL, strError, strTitle, MB_ICONEXCLAMATION);
}
/*************************************************************************
* 功能:建立与给定数据库的连接
* 参数:_ConnectionPtr cn: 连接名
* CString strDBName: 需要连接的数据库名
* 返回:成功,TRUE; 失败,FALSE;
**************************************************************************/
BOOL CreateCN(_ConnectionPtr cn, CString strDBName)
{
CString g_strSysUser ="sa";
CString g_strSysPwd = "";
if (cn->State == 1) cn->Close();
try
{
cn->Open((_bstr_t)("DSN=WUSHIWJ;DB=" + strDBName), (_bstr_t)g_strSysUser, (_bstr_t)g_strSysPwd, 0);
}
catch(...)
{
return FALSE;
}
return TRUE;
}
/*************************************************************************
* 名 称: ExecuteSql
* 功 能: 执行SQL语句
* 参 数: char* szSql :SQL语句
* BYTE bMode :模式
* _RecordsetPtr &rs:返回结果记录
* CString strError :返回错误信息
* 返回值: TRUE: 成功 FALSE:失败
*************************************************************************/
BOOL ExecuteSql(CString szSql, BYTE bMode,_RecordsetPtr &rs, CString *strError)
{
COleVariant wk;
try
{
switch(bMode)
{
case DB_COMMAND_NORESULT: //只执行命令
g_pCN->Execute(_bstr_t(szSql),&wk,adOptionUnspecified);
break;
case DB_COMMAND_RESULT_READONLY://只读记录集
rs = g_pCN->Execute(_bstr_t(szSql),&wk,adOptionUnspecified);
g_pCN->Execute("commit transaction", &wk, adOptionUnspecified);
break;
case DB_COMMAND_RESULT_WRITE: //可读写记录集
rs.CreateInstance(__uuidof(Recordset));
rs->Open(_bstr_t(szSql),_variant_t((IDispatch*)g_pCN,true),adOpenForwardOnly,adLockPessimistic,adCmdUnknown);
g_pCN->Execute("commit transaction", &wk, adOptionUnspecified);
break;
}
}
catch(_com_error &e)
{
strError->Format ("%s", (char*)(e.Description()));
return FALSE;
}
catch(...)
{
return FALSE;
}
return TRUE;
}
/*************************************************************************
* 功 能: 取记录字段数据
* 参 数: char* fname :字段名
* BYTE bType :数据类型
* _RecordsetPtr pset:记录集
* void* lpdada :字段数据指针
* 返回值: TRUE:成功 FALSE:失败
*************************************************************************/
BOOL GetFieldString(CString fieldName, CString *strData)
{
strData->Empty();
COleVariant wk;
try
{
wk = g_pRS->GetCollect((_variant_t)fieldName);
*strData = wk.bstrVal;
strData->TrimLeft(32);
strData->TrimRight(32);
return TRUE;
}
catch(...)
{
return FALSE;
}
}
/*************************************************************************
* 功 能: 取记录字段数据
* 参 数: char* fname :字段名
* BYTE bType :数据类型
* _RecordsetPtr pset:记录集
* void* lpdada :字段数据指针
* 返回值: 0:成功 -1:失败 1:空值
*************************************************************************/
int GetFieldValue(char* fname,void* lpdada,BYTE bType)
{
COleVariant wk;
int rtn = 0;
COleDateTime* t1;
CString kk;
try
{
switch(bType)
{
case 0x01: //BYTE
*(BYTE*)lpdada = 0;
break;
case 0x02: //WORD
*(WORD*)lpdada = 0;
break;
case 0x03: //DWORD
*(DWORD*)lpdada = 0;
break;
case 0x04: //LONG
*(long*)lpdada = 0;
break;
case 0x05: //double
*(double*)lpdada = 0.0;
break;
case 0x06: //char*
strcpy((char*)lpdada,"");
break;
case 0x07: //date
((SYSTEMTIME*)lpdada)->wYear = 1900;
break;
///
case 0x10: //float
*(float*)lpdada = 0.0;
break;
case 0x11: //short
*(short*)lpdada = 0;
break;
}
wk = g_pRS->GetCollect(fname);
if(wk.vt == VT_NULL) return 1;
switch(bType)
{
case 0x01: //BYTE
if(wk.vt == VT_R8)
{
*(BYTE*)lpdada = (BYTE)(wk.dblVal);
}
else
{
*(BYTE*)lpdada = wk.bVal;
}
break;
case 0x02: //WORD
if(wk.vt == VT_R8)
{
*(WORD*)lpdada = (WORD)(wk.dblVal);
}
else
{
*(WORD*)lpdada = wk.uiVal;
}
break;
case 0x03: //DWORD
if(wk.vt == VT_R8)
{
*(DWORD*)lpdada = (DWORD)(wk.dblVal);
}
else
{
*(DWORD*)lpdada = wk.ulVal;
}
break;
case 0x04: //LONG
if(wk.vt == VT_R8)
{
*(long*)lpdada = (long)(wk.dblVal);
}
else
{
*(long*)lpdada = (long)wk.lVal;
}
break;
case 0x05: //double
if(wk.vt == VT_R8)
{
*(double*)lpdada = wk.dblVal;
}
else
{
*(double*)lpdada = wk.dblVal;
}
break;
case 0x06: //char *
kk = wk.bstrVal;
kk.TrimLeft();
kk.TrimRight();
strcpy((char*)lpdada,kk);
break;
case 0x07: //date
t1 = new COleDateTime(wk);
((SYSTEMTIME*)lpdada)->wYear = t1->GetYear();
((SYSTEMTIME*)lpdada)->wMonth = t1->GetMonth();
((SYSTEMTIME*)lpdada)->wDay = t1->GetDay();
((SYSTEMTIME*)lpdada)->wHour = t1->GetHour();
((SYSTEMTIME*)lpdada)->wMinute = t1->GetMinute();
((SYSTEMTIME*)lpdada)->wSecond = t1->GetSecond();
delete t1;
break;
case 0x10: //float
*(float*)lpdada = wk.fltVal;
break;
case 0x11: //short
*(short*)lpdada = wk.iVal;
break;
}
}
catch(_com_error &e)
{
rtn = -1;
MessageBox(AfxGetMainWnd()->GetSafeHwnd(),e.Description(), "提示", MB_OK | MB_ICONEXCLAMATION);
}
catch(...)
{
rtn = -1;
}
return rtn;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -