?? 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 + -