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

📄 grobalfunc.cpp

📁 有关于VC操作Word的程序
💻 CPP
字号:
#include "StdAfx.h"
#include "Resource.h"
#include "GrobalFunc.h"
#include "OperateReg.h"

//全局变量,存放注册表中的信息
//在程序的开始一次性取出注册表中的值,方便后续操作,避免重复操作注册表
CString sz_ip,sz_loginname,sz_loginpwd,sz_dataip,sz_dataport,sz_installpath;

//将sz_ip等五个全局变量的值保存到注册表
void RegResultSave()
{	
	COperateReg operatereg;
	operatereg.keyname="ip";
	operatereg.keyvalue=sz_ip;
	operatereg.SetRegKey();

	operatereg.keyname="loginname";
	operatereg.keyvalue=sz_loginname;
	operatereg.SetRegKey();
	
	operatereg.keyname="loginpwd";
	operatereg.keyvalue=sz_loginpwd;
	operatereg.SetRegKey();

	operatereg.keyname="dataip";
	operatereg.keyvalue=sz_dataip;
	operatereg.SetRegKey();
	
	operatereg.keyname="dataport";
	operatereg.keyvalue=sz_dataport;
	operatereg.SetRegKey();
	return;
}

//将编辑框设置的值存放入sz_ip等五个全局变量
void RegResultSave(CString keyname,CString value)
{
	if(keyname=="ip")
		sz_ip=value;
	if(keyname=="loginname")
		sz_loginname=value;
	if(keyname=="loginpwd")
		sz_loginpwd=value;
	if(keyname=="dataip")
		sz_dataip=value;
	if(keyname=="dataport")
		sz_dataport=value;
    return;
}

//取出注册表的值保存到sz_ip等六个全局变量
void RegResultGet()
{
	COperateReg operatereg;
	operatereg.keyname="ip";
	if(operatereg.GetRegKey()==-1)
		sz_ip="";
	else
		sz_ip=operatereg.keyvalue;

	operatereg.keyname="loginname";
	if(operatereg.GetRegKey()==-1)
		sz_loginname="";
	else
		sz_loginname=operatereg.keyvalue;

	operatereg.keyname="loginpwd";
	if(operatereg.GetRegKey()==-1)
		sz_loginpwd="";
	else
		sz_loginpwd=operatereg.keyvalue;

    operatereg.keyname="dataip";
	if(operatereg.GetRegKey()==-1)
		sz_dataip="";
	else
		sz_dataip=operatereg.keyvalue;

	operatereg.keyname="dataport";
	if(operatereg.GetRegKey()==-1)
		sz_dataport="";
	else
		sz_dataport=operatereg.keyvalue;

	operatereg.keyname="installpath";
	if(operatereg.GetRegKey()==-1)
		sz_installpath="";
	else
		sz_installpath=operatereg.keyvalue;

	return;
}

//取sz_ip等六个可能的全局变量的值
CString RegResultGet(CString keyname)
{
	CString result="";
	if(keyname=="ip")
		return sz_ip;
	if(keyname=="loginname")
		return sz_loginname;
	if(keyname=="loginpwd")
		return sz_loginpwd;
	if(keyname=="dataip")
		return sz_dataip;
	if(keyname=="dataport")
		return sz_dataport;
	if(keyname=="installpath")
		return sz_installpath;
    return result;
}

LPBYTE CString_To_LPBYTE(CString str)
{
	LPBYTE lpb=new BYTE[str.GetLength()+1];
	for(int i=0;i<str.GetLength();i++)
		lpb[i]=str[i];
	lpb[str.GetLength()]=0;
	return lpb;
}

/*操作数据库*/
//g_connection 全局连接库指针,Connectted 全局库连接状态
ado::_ConnectionPtr  g_connection;
BOOL Connectted=FALSE;

/*连接数据库*/
ado::_ConnectionPtr DatabaseConnect()
{
	g_connection.CreateInstance(_uuidof(ado::Connection));
	try                 
	{	
		// 打开Sqlserver库scudata.db
		g_connection->Open("Provider=MSDASQL.1;Data Source=test1",_bstr_t(sz_loginname),_bstr_t(sz_loginpwd),ado::adConnectUnspecified);
		//打开Oracle
//		g_connection->Open("Provider=MSDAORA.1;Data Source=QSII",_bstr_t(sz_loginname),_bstr_t(sz_loginpwd),ado::adConnectUnspecified);
	}
	catch(_com_error e)
	{
		//数据库连接失败!
		Connectted=FALSE;
		AfxMessageBox(e.Description());
		g_connection=NULL;
	}
	if(g_connection!=NULL)
	{
		//设置已连接标志位
		Connectted=TRUE;
        
		//将菜单的"连接","断开"分别记上Checked和UnChecked
/*		CMenu *m_menu, *m_submenu;
		m_menu=::AfxGetMainWnd()->GetMenu();
		m_submenu=m_menu->GetSubMenu(0);
        
		UINT state=m_submenu->GetMenuState(ID_MENU_CONNECT,MF_BYCOMMAND);
		ASSERT(state!=0xFFFFFFFF);
		m_submenu->CheckMenuItem(ID_MENU_CONNECT,MF_CHECKED|MF_BYCOMMAND);

		state=m_submenu->GetMenuState(ID_MENU_DISCONNECT,MF_BYCOMMAND);
		ASSERT(state!=0xFFFFFFFF);
		m_submenu->CheckMenuItem(ID_MENU_DISCONNECT,MF_UNCHECKED|MF_BYCOMMAND);		
*/	}
	return g_connection;
}

/*断开数据库连接*/
void DatabaseDisConnect()
{
	g_connection=NULL;
	Connectted=FALSE;
	//将菜单的"连接","断开"分别记上UnChecked和Checked
/*	CMenu *m_menu, *m_submenu;
	m_menu=::AfxGetMainWnd()->GetMenu();
	m_submenu=m_menu->GetSubMenu(0);
        
	UINT state=m_submenu->GetMenuState(ID_MENU_CONNECT,MF_BYCOMMAND);
	ASSERT(state!=0xFFFFFFFF);
	m_submenu->CheckMenuItem(ID_MENU_CONNECT,MF_UNCHECKED|MF_BYCOMMAND);

	state=m_submenu->GetMenuState(ID_MENU_DISCONNECT,MF_BYCOMMAND);
	ASSERT(state!=0xFFFFFFFF);
	m_submenu->CheckMenuItem(ID_MENU_DISCONNECT,MF_CHECKED|MF_BYCOMMAND);
*/	return;
}

/*定义记录集指针*/
ado::_RecordsetPtr DefineDatabaseRecordset()
{
	ado::_RecordsetPtr pRecordset;
    pRecordset.CreateInstance(_uuidof(ado::Recordset));
	pRecordset->LockType=ado::adLockOptimistic;
	pRecordset->CursorType=ado::adOpenDynamic;
	pRecordset->CursorLocation=ado::adUseClient;
	return pRecordset;
}

/*执行strSql中的SQL语句,并将结果返回到m_pRecordset,若成功则返回TRUE,否则返回FALSE*/
BOOL GetOpenRecordset(ado::_RecordsetPtr& m_pRecordset, CString strSql)
{
	//从数据库中取出strSql的结果记录集
	if(Connectted==FALSE)
		::DatabaseConnect();
	if(g_connection==NULL)
		return false;
	
	//执行strSql语句
	if(m_pRecordset->State==ado::adStateOpen) //若记录集对象是打开的则对其进行关闭
	{
		m_pRecordset->Close();//关闭记录集
	}

	BSTR bstrSql=strSql.AllocSysString();
	
	try
	{	
		m_pRecordset->Open(bstrSql,
			          //获取库接库的IDispatch指针
					  _variant_t((IDispatch*)g_connection,true),	 
					  ado::adOpenDynamic,
					  ado::adLockOptimistic,
					  ado::adCmdText);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
		return false;
	} 
	return true;
}

/*执行SQl语句*/
BOOL ExecuteSQL(CString strSql)
{
	if(Connectted==FALSE)
		::DatabaseConnect();
	if(g_connection==NULL)
		return false;

	_variant_t RecordsAffected;
	try
	{
		g_connection->Execute(_bstr_t(strSql),&RecordsAffected,ado::adCmdText);
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.Description());
		return false;
	}
	return true;
}

/*操作参数分离*/
double GetPara(CString data,int n,char compare)  
//若compare为. ,data的值为a.b.c.d.e.f ,若n=1则取出a,该函数的目的是分离中间的各数;
//若compare为char(200),data的值为12char(200)24.25char(200)25,若n=2则取出24.25.
{
	double len;
	int k=0,j;
	char str[30];
	len=data.GetLength();
	memset(str,0,sizeof(str));

	//计算data中的"compare"的个数,n不能超过"个数+2"
	for(int i=0;i<len;i++)
	{
		if(data.GetAt(i)==compare)
		{
			k++;
		}
	}
	if(n>=k+2)
		return -1;

	//取得参数合理,进行下面的操作
	k=j=0;
	for(i=0;i<len;i++)
	{						
		if(k==n-1)
		{			
			str[j]=data.GetAt(i);
			j++;					
		}
		if(data.GetAt(i)==compare)
		{
			k+=1;
			j=0;
		}
	}	
	len=atof(str);
	return len;
}

CString GetParaS(CString data,int n,char compare)//修改:传入分隔符的参数
{
	CString result;
	int len,k=0,j;
	char str[30];
	len=data.GetLength();
	memset(str,0,sizeof(str));

	//计算data中的"compare"的个数,n不能超过"个数+2"
	for(int i=0;i<len;i++)
	{
		if(data.GetAt(i)==compare)
		{
			k++;
		}
	}
	if(n>=k+2)
		return -1;

	//取得参数合理,进行下面的操作
	k=j=0;
	for(i=0;i<len;i++)
	{						
		if(k==n-1 && data.GetAt(i)!=compare)//修改:取出的字符串不包括分隔符"."
		{			
			str[j]=data.GetAt(i);
			j++;					
		}
		if(data.GetAt(i)==compare)
		{
			k+=1;
			j=0;
		}
	}	
	result=str;
	return result;
}

⌨️ 快捷键说明

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