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