亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? oledbdll2.cpp

?? 這是一個基于COM的數據庫訪問技術
?? CPP
字號:
// OleDBDLL2.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "OleDBDLL2.h"
#include "ConfigFile.h"
#include "AdoDatabase.h"

CConfigFile gConfigFile ;

void  FillDataToArray(int nType,int nTableOrder)  ;
int GetTableOrderByName(char* szTable2) ;

#define  MAX_FIELDS     255   //最大字段數量 
#define	 MAX_DATA	    255   //字段[字符類型]中最大字節數 
#define  MAX_FieldLen   30    //最大字段名字長度
#define  MAX_TableLen   50    //同一個數據庫中最大表數量

//全局變量
CAdoDatabase m_Database[16] ; //總共16路
char lpFieldName[3000],GetName[50] ;

char gArrayTableName[MAX_TableLen][MAX_FieldLen] ;              //表名字數組
char gArrayFieldCount[MAX_TableLen][10]           ;             //每個表對于表字段個數
char gArrayFieldName[MAX_TableLen][MAX_FIELDS][MAX_FieldLen] ;  //每個表對應的字段名字數組
char gArrayFieldType[MAX_TableLen][MAX_FIELDS][MAX_FieldLen] ;  //每個表對應的字段類型數組 1,2,3,4 /**/
unsigned int nAllTableCount = 0  ;                              //實際表的總數

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			  if(!gConfigFile.FindFile("ConfigFile.ini"))
			  {
			    MyTitle("沒有ConfigFile文件!\n請檢查!") ;
				return FALSE ;
			  }
			  CoInitialize (NULL);
			break ;
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}

void MyTitle(char* szTitle) 
{
	MessageBox(::GetFocus(),szTitle,"提示",MB_ICONWARNING|MB_OK) ;
}

/*讀取配置文件*/
BOOL ExReadConfigString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpDefault,char* szOut) 
{
	return gConfigFile.ReadConfigString(lpSection,lpKey,lpDefault,szOut) ;
}

/* 1 連接數據庫 從0開始 參數: Dsn Uid Pwd */
BOOL ExOpenDatabase1(int nOrder, char* sDSN, char* sUserId, char* sPassword) 
{
      return m_Database[nOrder].ConnectDB1(sDSN,sUserId,sPassword) ;
}

/* 2 連接數據庫 從0開始 參數: int nOrder int nType, char *szServerName, char *szDatabase, char *szUid, char *szPwd */
BOOL ExOpenDatabase2(int nOrder, char *szServerName, char *szDatabase, char *szUid, char *szPwd) 
{
      return m_Database[nOrder].ConnectDB2(szServerName,szDatabase,szUid,szPwd) ;
}

/* 3 關閉數據庫 參數: 沒有參數*/
void ExCloseDatabase(int nOrder) 
{
	m_Database[nOrder].DisconnectionDB() ;
}

/* 4 設置綁定表的某字段的值,在增加紀錄時要用到。參數:字段序號、字段的值*/
void ExSetFieldValue(int nOrder,int iFieldOrder,char* sFieldValue) 
{
	if(iFieldOrder > MAX_FIELDS -1)
		return  ;
	if(strlen(sFieldValue)<MAX_DATA)
	 strcpy(m_Database[nOrder].m_sFieldValue[iFieldOrder],sFieldValue) ;
	else
	 memcpy(m_Database[nOrder].m_sFieldValue[iFieldOrder],sFieldValue,MAX_DATA-1) ;
}

/* 5 獲取綁定表的某字段的值,往往查詢出紀錄時,取某字段的值用到。 參數:字段序號*/
void ExGetFieldValue(int nOrder,int iFieldOrder,char* fieldValue) 
{
	if(iFieldOrder > MAX_FIELDS -1)
		return ;
    strcpy(fieldValue,m_Database[nOrder].m_sFieldValue[iFieldOrder]) ;
}

/* 6 向臨時綁定的表增加一條紀錄*/
BOOL ExAddRecord(int nOrder) 
{
	return m_Database[nOrder].AddRecord() ;
}

/* 7 修改臨時綁定表的一條紀錄*/
BOOL ExUpdateRecord(int nOrder,char* sExWhereUpdate)   
{
	return m_Database[nOrder].UpdateRecord(sExWhereUpdate) ;
}

/* 8 查找紀錄---返回值
     1: 即沒有錯誤發生的找到紀錄
     -1:在查找過程中出現錯誤 
     0: 查找過程當中沒有錯誤出現,但是沒有找到適合條件的紀錄,即沒有返回紀錄  */
int ExSelectMatchingRecords(int nOrder,char* sExWhereContext) 
{
  return m_Database[nOrder].SelectMatchingRecords(sExWhereContext) ;
}

/* 9 查找臨時綁定的表的下一條紀錄。往往用在查找查找多條紀錄。
	 即:先調用ExSelectMatchingRecords()查詢紀錄,然后再循環
	 調用ExNextMatchingRecord()函數,這樣可以查詢到多條紀錄*/
BOOL ExNextMatchingRecord(int nOrder)
{
   return m_Database[nOrder].NextMatchingRecord() ;
}


/*10 執行一句 SQL語句*/
BOOL ExExecute(int nOrder ,char* sExSQL) 
{
	return m_Database[nOrder].ExecuteSQL(sExSQL) ;
}

/* 11 返回最近出錯的原因 */
void ExGetExecError(int nOrder,char* szError) 
{
	strcpy(szError,m_Database[nOrder].m_szErrMsg);
}

/*12 開始 事務*/
void ExStartTran(int nOrder)
{
	m_Database[nOrder].StartTran() ;
}

/*13 遞交事務 */
void ExCommitTran(int nOrder)
{
	m_Database[nOrder].CommitTran() ;
}

/*14 回滾事務*/
void ExRollbackTran(int nOrder)
{
	m_Database[nOrder].RollbackTran() ;
}

//初始化所有表結構信息
BOOL InitAllTableInfo() 
{
   unsigned int i,j,k,nLen;

   i=0 ;
   j=0 ;
   k=0 ;
   memset(lpFieldName,0x00,sizeof(lpFieldName)) ;
   memset(GetName,0x00,sizeof(GetName)) ;
   
   gConfigFile.ReadConfigString("AllTableName","AllTableName","Test",lpFieldName) ;
   nLen = strlen(lpFieldName) ;
   if(memcmp(lpFieldName,"Test",4)!=0)
   {
     for(i=0;i<nLen;i++)
	 {
        if(lpFieldName[i]!=',')
		{
		  GetName[j]=lpFieldName[i] ;
          j++ ;
		}
		else
		{
          GetName[j]=0x00 ;
          strcpy(gArrayTableName[k],GetName)  ;  //取得表名字
          k ++ ;
		  j=0 ;
          memset(GetName,0x00,sizeof(GetName)) ; 
		}
	 }

	 nAllTableCount = k ; //實際表的個數
   }
   else
   {
	   MessageBox(::GetFocus(),"ConfigFile文件缺少信息!","提示",MB_ICONWARNING|MB_OK) ;
	   return FALSE ;
   }

   //--------取每個表字段總數
   for(i=0;i<nAllTableCount;i++)
   {
       memset(GetName,0x00,sizeof(GetName)) ;
       gConfigFile.ReadConfigString(gArrayTableName[i],"FieldCount","Test",GetName) ;
       if(memcmp(GetName,"Test",4)==0)
	   {
         sprintf(GetName,"表名字為 %s 的FieldCount配置有錯 !",gArrayTableName[i]) ; 
 	     MessageBox(::GetFocus(),GetName,"提示",MB_ICONWARNING|MB_OK) ;
	     return FALSE ;
	   }else
         strcpy(gArrayFieldCount[i],GetName) ;

	   //-------取得每個表的字段名字
       gConfigFile.ReadConfigString(gArrayTableName[i],"FieldName","Test",lpFieldName) ;
       if(lpFieldName[0]=='$')
	   {
         sprintf(GetName,"表名字為 %s 的FieldName配置有錯 !",gArrayTableName[i]) ; 
 	     MessageBox(::GetFocus(),GetName,"提示",MB_ICONWARNING|MB_OK) ;
	     return FALSE ;
	   }else
	   {//字段名字
          FillDataToArray(1,i) ;
	   }

	   //-------取得每個表的字段類型
       gConfigFile.ReadConfigString(gArrayTableName[i],"FieldNumeric","Test",lpFieldName) ;
       if(lpFieldName[0]=='$')
	   {
         sprintf(GetName,"表名字為 %s 的FieldNumeric配置有錯 !",gArrayTableName[i]) ; 
 	     MessageBox(::GetFocus(),GetName,"提示",MB_ICONWARNING|MB_OK) ;
	     return FALSE ;
	   }else
	   {//字段類型
           FillDataToArray(2,i) ; //填充類型
	   }

   }
   return TRUE ;
}

//填充相應的數據到數組 nType==1 名字 2 類型
void  FillDataToArray(int nType,int nTableOrder) 
{
	unsigned int i,j,k=0,nLen;
	
	i=0 ;
	j=0 ;
	memset(GetName,0x00,sizeof(GetName)) ;
	
	nLen = strlen(lpFieldName) ;
    for(i=0;i<nLen;i++)
	{
        if(lpFieldName[i]!=',')
		{
			GetName[j]=lpFieldName[i] ;
			j++ ;
		}
		else
		{
			GetName[j]=0x00 ;
			if(nType==1)
               strcpy(gArrayFieldName[nTableOrder][k],GetName) ;
            else
               strcpy(gArrayFieldType[nTableOrder][k],GetName) ;
            k ++ ;			   	
			j=0 ;
			memset(GetName,0x00,sizeof(GetName)) ; 
		}
	}
}

//填充表結構
void FillTableInfo2(int nOrder ,char* szTable)
{
   unsigned int nTableOrder = GetTableOrderByName(szTable) ;
   unsigned int i = 0 ;

   if(nTableOrder==-1)
   {
	 sprintf(GetName,"填充表結構出錯,\n沒有找到你需要的表%s",szTable) ;
	 MessageBox(::GetFocus(),GetName,"提示",MB_ICONSTOP|MB_OK) ;
	 return ;
   }

   //表名字
   strcpy(m_Database[nOrder].m_szTableName,gArrayTableName[nTableOrder]) ;
   //表字段數量
   m_Database[nOrder].m_nFields=atoi(gArrayFieldCount[nTableOrder]) ;

   //字段名字
   for(i=0;i<m_Database[nOrder].m_nFields;i++)
       strcpy(m_Database[nOrder].m_sFieldName[i],gArrayFieldName[nTableOrder][i]) ;

   //字段類型
   for(i=0;i<m_Database[nOrder].m_nFields;i++)
       m_Database[nOrder].m_bNumeric[i]=atoi(gArrayFieldType[nTableOrder][i]) ;
}

//根據表名字返回對于序號
int GetTableOrderByName(char* szTable2)
{
    if(nAllTableCount==0)
	{
		MessageBox(::GetFocus(),"沒有調用函數:InitAllTableInfo,\n或者ConfigFile文件沒有配置好AllTableName那項。","提示",MB_ICONWARNING|MB_OK) ;
		return -1 ;
	}
    if(nAllTableCount>MAX_TableLen)
	{
		MessageBox(::GetFocus(),"表總數量錯誤!","提示",MB_ICONWARNING|MB_OK) ;
		return -1 ;
	}
    for(unsigned int i=0;i<nAllTableCount;i++)
	{
		if(strcmp(gArrayTableName[i],szTable2)==0)
			return i ;
	}
	return -1 ;
}

//返回某一路字段總數
int ExGetFieldCount(int nOrder) 
{
	return m_Database[nOrder].m_nFields  ;
}

//返回某一路字段總數
BOOL ExGetFieldName(int nOrder,int nFieldOrder,char* szFieldName) 
{
	if(nFieldOrder > MAX_FIELDS -1)
		return FALSE;
	strcpy(szFieldName,m_Database[nOrder].m_sFieldName[nFieldOrder]);
	return TRUE ;
}

//返回某一路,某個字段類型
int ExGetFieldType(int nOrder,int nFieldOrder ) 
{
	return m_Database[nOrder].m_bNumeric[nFieldOrder]  ;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一卡二卡三卡四卡五卡| 麻豆91精品视频| 成人免费看视频| 精品国产乱码久久久久久闺蜜| 日韩二区三区四区| 欧美一卡二卡三卡四卡| 免费美女久久99| 久久久久久久综合| zzijzzij亚洲日本少妇熟睡| 国产精品高潮呻吟久久| 在线视频一区二区三区| 亚洲成人久久影院| 日韩欧美一区在线观看| 国产99久久久久| 一区二区三区视频在线观看| 欧美日韩在线三区| 精品亚洲国内自在自线福利| 久久精品免视看| 色婷婷综合久久久中文一区二区| 亚洲国产综合在线| 精品成a人在线观看| 成人国产精品免费观看动漫| 一区二区三区在线播放| 911精品产国品一二三产区| 国产精品综合二区| 亚洲精品亚洲人成人网| 欧美一级久久久| 99久久亚洲一区二区三区青草| 亚洲国产成人精品视频| 久久久久青草大香线综合精品| 99精品视频免费在线观看| 91在线一区二区三区| 天堂成人免费av电影一区| 国产校园另类小说区| 色94色欧美sute亚洲线路一久 | 亚洲一区二区成人在线观看| 日韩色视频在线观看| 97se狠狠狠综合亚洲狠狠| 青青草伊人久久| 亚洲免费三区一区二区| xvideos.蜜桃一区二区| 91国偷自产一区二区开放时间 | 大美女一区二区三区| 午夜影院在线观看欧美| 国产女主播视频一区二区| 欧美日韩国产美| 97国产精品videossex| 久久精品国产成人一区二区三区 | 亚洲靠逼com| 久久网站最新地址| 欧美日韩精品免费观看视频| 激情图区综合网| 欧美精品黑人性xxxx| 久久国产精品色| 日韩一级免费观看| 日本丶国产丶欧美色综合| 国产美女av一区二区三区| 日本午夜精品视频在线观看| 一区二区三区四区视频精品免费 | 国v精品久久久网| 日韩中文字幕不卡| 亚洲激情图片一区| 亚洲欧洲国产日本综合| 国产日产欧美一区二区视频| 精品国产三级a在线观看| 欧美激情在线观看视频免费| 日韩一区二区三区视频| 欧美日韩国产综合视频在线观看 | 国产福利一区二区| 久久精品国产亚洲5555| 日韩高清国产一区在线| 亚洲 欧美综合在线网络| 亚洲综合一区二区| 亚洲激情综合网| 亚洲日本免费电影| 亚洲欧洲国产专区| 亚洲精品免费在线观看| 亚洲三级视频在线观看| 亚洲人成网站影音先锋播放| 亚洲视频一区在线| 亚洲精品欧美激情| 亚洲第一搞黄网站| 日韩精品一二区| 奇米一区二区三区| 久久99久久精品欧美| 久久疯狂做爰流白浆xx| 精品亚洲成a人| 国产精品一区一区三区| 国产jizzjizz一区二区| 国产精品99久久久久久有的能看| 国产精品原创巨作av| 国产69精品久久777的优势| 粉嫩aⅴ一区二区三区四区五区| 久久综合九色综合久久久精品综合| 国产日韩欧美制服另类| 国产精品成人免费| 亚洲国产成人91porn| 国产精品少妇自拍| 日韩一卡二卡三卡四卡| 一本大道久久a久久综合婷婷 | 色婷婷久久综合| 奇米四色…亚洲| 日本亚洲一区二区| 国产毛片精品国产一区二区三区| 久久久久国产精品人| 国产精品天天看| 亚洲人123区| 丝袜亚洲另类欧美综合| 久久不见久久见免费视频1 | 亚洲高清在线精品| 日本vs亚洲vs韩国一区三区二区| 麻豆久久一区二区| 成人av免费在线观看| 欧美在线三级电影| 26uuu国产一区二区三区| 欧美激情在线一区二区三区| 亚洲一二三四区不卡| 国产麻豆精品theporn| 色噜噜夜夜夜综合网| 欧美成人猛片aaaaaaa| 最新成人av在线| 黑人巨大精品欧美一区| 色综合色综合色综合色综合色综合| 欧美理论在线播放| 一区二区三区91| 美女视频黄 久久| 99精品热视频| 精品福利一区二区三区| 一区二区三区久久| 国产精品99久| 91精品国产入口在线| 最新久久zyz资源站| 激情久久久久久久久久久久久久久久| 色综合久久88色综合天天6| 日韩欧美国产1| 一级做a爱片久久| 成人免费看片app下载| 日韩欧美色电影| 亚洲制服丝袜一区| 成人黄色片在线观看| 欧美videos中文字幕| 亚洲一区二区美女| 99久久精品99国产精品| 精品久久人人做人人爱| 亚洲无线码一区二区三区| 不卡的av电影| 久久尤物电影视频在线观看| 午夜不卡av在线| 欧美综合亚洲图片综合区| 国产女同互慰高潮91漫画| 国产资源在线一区| 欧美一区日本一区韩国一区| 一区二区三区欧美激情| www.亚洲人| 国产精品丝袜黑色高跟| 激情综合色综合久久| 91精品国产综合久久久久久| 亚洲一区二区三区免费视频| 色综合天天综合网天天看片| 亚洲人成精品久久久久| 国产成人av一区二区三区在线| 日韩一区二区视频| 丝袜脚交一区二区| 欧美色精品天天在线观看视频| 伊人色综合久久天天| 91免费观看视频| 亚洲精品国产高清久久伦理二区| 成人动漫av在线| 亚洲欧美自拍偷拍| 97成人超碰视| 亚洲一区二区三区美女| 在线视频欧美精品| 亚洲午夜三级在线| 欧美日韩在线免费视频| 丝袜亚洲另类欧美| 日韩一级二级三级精品视频| 美女视频黄久久| 久久久国产一区二区三区四区小说| 精品一区二区三区不卡| 久久久影视传媒| 成人精品免费视频| 亚洲欧洲在线观看av| 色美美综合视频| 视频一区二区不卡| 日韩美女视频一区二区在线观看| 久久精品二区亚洲w码| 久久久五月婷婷| 波多野结衣精品在线| 一区二区三区四区亚洲| 在线综合视频播放| 国产酒店精品激情| 亚洲婷婷在线视频| 欧美老女人第四色| 国产高清在线精品| 亚洲色图欧洲色图| 91精选在线观看| 丁香六月综合激情| 亚洲第一会所有码转帖| 精品国产成人系列| 91一区一区三区|