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

📄 common.cpp

📁 sysbase 12 用程序实现加卸载数据。
💻 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 + -