📄 wdb.~cpp
字号:
//---------------------------------------------------------------------------
#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 + -