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

📄 wdb.~cpp

📁 ADO写的数据库接口,CB 6 编译通过
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#pragma hdrstop
#include "dbbaseclass.h"
#include "dbaccess.h"
#include "dbsqlserver.h"
#include "dbmysql.h"
//#include "dbfacemysql.h"
//#include "paradox.h"


extern "C"  bool  __stdcall __declspec(dllexport)    WDB_GetSupportDBClass(char  szDBName[15][60]);

//szDriver为空表示采用缺省的驱动
extern "C"  HANDLE   __stdcall __declspec(dllexport) WDB_NewDBSession(char  *szClassName,char *szDriver);
extern "C"  bool  __stdcall __declspec(dllexport)    WDB_FreeDBSession (HANDLE pHandle);

//extern "C"  bool  __stdcall __declspec(dllexport) WDB_SetDBDriver(HANDLE pHandle,char  *szDrvName);
//extern "C"  bool  __stdcall __declspec(dllexport) WDB_CreateDSN (HANDLE pHandle,char * szAttributes);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_CreateDB (HANDLE pHandle,char * szDBName);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_ConnectDB (HANDLE pHandle,char *szhostserver,
    char *szUser,char *szPassWord,char *szDBName);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_ConnectDBByStr (HANDLE pHandle,char *szConnectStr);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_UseDB (HANDLE pHandle,char *szDBName);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_GetCurrDB(HANDLE pHandle,char *szDbName);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_CloseDB (HANDLE pHandle);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_GetAllDB (HANDLE pHandle,char * szDBName,int iSize);
//extern "C"  bool  __stdcall __declspec(dllexport) WDB_GetAllDSN (HANDLE pHandle,char * szDBDSN,int iSize);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_GetAllUser (HANDLE pHandle,DB_USER_INFO * szUser,int iInNum,int *iOutNum);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_SetUserRole (HANDLE pHandle,DB_USER_INFO *useinfo,char *szDBName);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_DeleteUser (HANDLE pHandle,DB_USER_INFO *UserInfo);
//extern "C"  bool  __stdcall __declspec(dllexport) WDB_DelUser (HANDLE pHandle,char *username);

extern "C"  bool  __stdcall __declspec(dllexport) WDB_ExecSQLCmd(HANDLE pHandle,char * szSQL);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_ExecSQL(HANDLE pHandle,char * szSQL,void *callback);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_ExecSQLFile(HANDLE pHandle,char * szSQLFile,void *callback);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_Query(HANDLE pHandle,char * szSQL);
extern "C"  int   __stdcall __declspec(dllexport) WDB_RecordCount(HANDLE pHandle);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_First(HANDLE pHandle);
extern "C"  bool  __stdcall __declspec(dllexport) WDB_Next(HANDLE pHandle);
extern "C"  char *__stdcall __declspec(dllexport) WDB_GetDataValue(HANDLE pHandle,char *szFieldName,int *len);
extern "C"  int   __stdcall __declspec(dllexport) WDB_GetIntValue(HANDLE pHandle,char *szFieldName);
extern "C"  char *__stdcall __declspec(dllexport) WDB_GetValueByIdx(HANDLE pHandle,int idx,char *szFieldName,int *len);
extern "C"  int   __stdcall __declspec(dllexport) WDB_GetIntByIdx(HANDLE pHandle,int idx,char *szFieldName);

extern "C"  void __stdcall __declspec(dllexport)  WDB_AddSQL(HANDLE pHandle,char *sql);
extern "C"  bool  __stdcall __declspec(dllexport)  WDB_SetParam(HANDLE pHandle,char *parm,char *value,int size,int type);
extern "C"  bool  __stdcall __declspec(dllexport)  WDB_RunSql(HANDLE pHandle);

extern "C"  bool   __stdcall __declspec(dllexport) BeginTrans(HANDLE pHandle,int *outLevel);
extern "C"  bool   __stdcall __declspec(dllexport) Commit(HANDLE pHandle);
extern "C"  bool   __stdcall __declspec(dllexport) Rollback(HANDLE pHandle);
extern "C"  bool   __stdcall __declspec(dllexport) LockTables(HANDLE pHandle,char *tables);
extern "C"  bool   __stdcall __declspec(dllexport) UnlockTables(HANDLE pHandle,char *tables);

extern "C"  bool   __stdcall __declspec(dllexport) WDB_Backup(HANDLE pHandle,char *db,char *username,char *password,char *pathname,void *callback);
extern "C"  bool   __stdcall __declspec(dllexport) WDB_Restore(HANDLE pHandle,char *db,char *username,char *password,char *pathname,void *callback);

extern "C"  bool   __stdcall __declspec(dllexport) WDB_GetFields(HANDLE pHandle,char *Fields,int *memsize,int *count);
extern "C"  char *__stdcall __declspec(dllexport) WDB_GetField(HANDLE pHandle,int idx);
extern "C"  int   __stdcall __declspec(dllexport) WDB_FieldCount(HANDLE pHandle);

extern "C"  int   __stdcall __declspec(dllexport) WDB_EscapeString(char *from ,char *to ,int fromlen);
extern "C"  void  __stdcall __declspec(dllexport) WDB_LockDB();
extern "C"  void  __stdcall __declspec(dllexport) WDB_UnLockDB();
extern "C"  char* __stdcall __declspec(dllexport) WDB_GetErr(HANDLE pHandle);
//---------------------------------------------------------------------------

typedef CRITICAL_SECTION pthread_mutex_t;
#define pthread_mutex_init(A)  InitializeCriticalSection(A)
#define pthread_mutex_lock(A)	 (EnterCriticalSection(A),0)#define pthread_mutex_trylock(A) (WaitForSingleObject((A), 0) == WAIT_TIMEOUT)#define pthread_mutex_unlock(A)  LeaveCriticalSection(A)#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
//#define MAX_DB  100
pthread_mutex_t LOCK_DB;


#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
   switch (reason)
	{
		case DLL_PROCESS_ATTACH:
            pthread_mutex_init(&LOCK_DB);
            CoInitialize(NULL);
            break;
		case DLL_THREAD_ATTACH:
            break;
		case DLL_THREAD_DETACH:
            break;
		case DLL_PROCESS_DETACH:
            CoUninitialize();
            pthread_mutex_destroy(&LOCK_DB);
//            FreeDBSession((HANDLE)pDBFace);
			break;
    }
    return 1;
}
//---------------------------------------------------------------------------


//#define PARADOX "Paradox"

void   __stdcall WDB_LockDB()
{
    pthread_mutex_lock(&LOCK_DB);
}

void   __stdcall WDB_UnLockDB()
{
    pthread_mutex_unlock(&LOCK_DB);
}

bool  __stdcall WDB_GetSupportDBClass(char  szDBName[15][60])
{
int i=0;
int size=15*60;
    memset(szDBName,0,size);
    strcpy(szDBName[i++],STR_MYSQL);
//    strcpy(szDBName[i++],PARADOX);
    return true;
}


HANDLE   __stdcall WDB_NewDBSession (char  *szClassName,char *szDriver)
{
CDBFaceBase *pDBFaceTmp=NULL;
    try{
        CoInitialize(NULL);
        if(strcmp(szClassName,STR_ACCESS)==0)
        {
            pDBFaceTmp = new CDBAccess;
        }
        else if(strcmp(szClassName,STR_SQLSERVER)==0)
        {
            pDBFaceTmp = new CDBSQLServer;
        }
        else if(strcmp(szClassName,STR_MYSQL)==0)
        {
            pDBFaceTmp = new CDBMySQL;
        }
    }
    catch(...)
    {
        return NULL;
    }
    if(pDBFaceTmp && szDriver && strlen(szDriver)>0)
        strcpy(pDBFaceTmp->m_Driver,szDriver);
    return (HANDLE)pDBFaceTmp;
}

bool  __stdcall WDB_FreeDBSession (HANDLE pHandle)
{
    if(pHandle)
    {
        CDBFaceBase *pDBFaceTmp = (CDBFaceBase *)pHandle;
        if(strcmp(pDBFaceTmp->m_ClassName,STR_ACCESS)==0)
            delete (CDBAccess *)pHandle;
        else if(strcmp(pDBFaceTmp->m_ClassName,STR_SQLSERVER)==0)
            delete (CDBSQLServer *)pHandle;
        else if(strcmp(pDBFaceTmp->m_ClassName,STR_MYSQL)==0)
            delete (CDBMySQL *)pHandle;
        else
            delete pHandle;
    }
    return true;
}

/*bool  __stdcall WDB_SetDBDriver(HANDLE pHandle,char  *szDrvName)
{
    if(pDBFace)
        return pDBFace->SetDBDriver(szDrvName);
    return false;
}
*/

/*bool  __stdcall WDB_CreateDSN (HANDLE pHandle,char * szAttributes)
{
    CDBFaceBase *pDBFace = (CDBFaceBase *)pHandle;
    if(pDBFace)
        return pDBFace->CreateDSN(szAttributes);
    return false;
}
*/
bool  __stdcall WDB_CreateDB (HANDLE pHandle,char * szDBName)
{
    CDBFaceBase *pDBFace = (CDBFaceBase *)pHandle;
    if(pDBFace)
        return pDBFace->CreateDB(szDBName);
    return false;
}

bool  __stdcall WDB_ConnectDB (HANDLE pHandle,char *szhost,char *szUser,char *szPassWord,char *szDBName)
{
    CDBFaceBase *pDBFace = (CDBFaceBase *)pHandle;
    if(pDBFace)
        return pDBFace->ConnectDB(szhost,szUser,szPassWord,szDBName);
    return false;
}


bool  __stdcall WDB_ConnectDBByStr (HANDLE pHandle,char *szConnectStr)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;
    if(pFace)
        return pFace->ConnectDBByStr(szConnectStr);
    return false;
}

bool  __stdcall WDB_UseDB (HANDLE pHandle,char *szDBName)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;
    if(pFace)
        return pFace->UseDB(szDBName);
    return false;
}

bool  __stdcall WDB_GetCurrDB(HANDLE pHandle,char *szDbName)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;
    if(pFace)
        return pFace->GetCurrDB(szDbName);
    return false;
}


bool  __stdcall WDB_CloseDB (HANDLE pHandle)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;
    if(pFace)
        return pFace->CloseDB();
    return false;
}

bool __stdcall WDB_GetAllDB (HANDLE pHandle,char * szDBName,int iSize)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;
    if(pFace)
        return pFace->GetAllDB(szDBName,iSize);
    return false;
}

/*bool __stdcall GetAllDSN (char * szDBDSN,int iSize)
{
    if(pDBFace)
        return pDBFace->GetAllDSN(szDBDSN,iSize);
    return false;
}
*/
bool  __stdcall WDB_GetAllUser (HANDLE pHandle,DB_USER_INFO * szUser,int iInNum,int *iOutNum)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;
    if(pFace)
        return pFace->GetAllUser(szUser,iInNum,iOutNum);
    return false;
}

bool  __stdcall WDB_SetUserRole (HANDLE pHandle,DB_USER_INFO *useinfo,char *szDBName)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;
    if(pFace)
        return pFace->SetUserRole(useinfo,szDBName);
    return false;
}

bool  __stdcall WDB_DeleteUser (HANDLE pHandle,DB_USER_INFO *useinfo)
{
    CDBFaceBase *pFace = (CDBFaceBase *)pHandle;

⌨️ 快捷键说明

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