867 lines
20 KiB
C++
867 lines
20 KiB
C++
#include "stdafx.h"
|
|
#include "UIIADORXServer.h"
|
|
#include "UIIImpADORXServer.h"
|
|
#include "UIIPackageDbOper.h"
|
|
#include "zlib.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
#ifdef _WIN64
|
|
#import "msado60_Backcompat_x64.tlb" no_namespace rename("EOF", "EndOfFile") rename("EOS", "EndOfStream")
|
|
#else
|
|
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile") rename("EOS", "EndOfString")
|
|
#endif
|
|
|
|
|
|
|
|
CUIIADORXServer::CUIIADORXServer()
|
|
{
|
|
m_pImp = new CUIIImpADORXServer;
|
|
}
|
|
|
|
CUIIADORXServer::~CUIIADORXServer()
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
delete pImpSrv;
|
|
m_pImp = NULL;
|
|
}
|
|
}
|
|
|
|
BOOL CUIIADORXServer::InitADOServer(LPCTSTR pszDbFileName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->InitADOServer(pszDbFileName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::InitADOServer(LPCTSTR pszConnection,bool bDisplayException, int OptionEnum)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->InitADOServer(pszConnection,bDisplayException, (ConnectOptionEnum)OptionEnum);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::InitADOServer(LPCTSTR pszDSN,LPCTSTR pszUserID,LPCTSTR pszPassword, int eMode, int eCursor)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->InitADOServer(pszDSN,pszUserID,pszPassword, (ConnectModeEnum)eMode, (CursorTypeEnum)eCursor);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::GetConnection(CString& sConntion)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetConnection(sConntion);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void CUIIADORXServer::SetDatabase(LPCTSTR pszDatabase)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->SetDatabase(pszDatabase);
|
|
}
|
|
}
|
|
|
|
LPCTSTR CUIIADORXServer::GetDatabase()
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetDatabase();
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
void CUIIADORXServer::AppendAssocDatabase(LPCTSTR pszKey,LPCTSTR pszAssocDb)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->AppendAssocDatabase(pszKey,pszAssocDb);
|
|
}
|
|
}
|
|
|
|
BOOL CUIIADORXServer::AssocDatabase(LPCTSTR pszKey,CString& sAssocDb)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->AssocDatabase(pszKey,sAssocDb);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void CUIIADORXServer::SetLoginID(LPCTSTR pszLoginName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->SetLoginID(pszLoginName);
|
|
}
|
|
}
|
|
|
|
LPCTSTR CUIIADORXServer::GetLoginID()
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->GetLoginID();
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
void CUIIADORXServer::SetGroupID(LPCTSTR pszGroup)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->SetGroupID(pszGroup);
|
|
}
|
|
}
|
|
|
|
LPCTSTR CUIIADORXServer::GetGroupID()
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetGroupID();
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::CreateOLEDBTable(LPCTSTR pszTableName,Ttable& arFields,LPCTSTR pszsDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->CreateOLEDBTable(pszTableName,arFields,pszsDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::CreateSQLSrvTable(LPCTSTR pszTableName,Ttable& arFields,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->CreateSQLSrvTable(pszTableName,arFields,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::IsSQLSrvTableExist(LPCTSTR pszTableName,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->IsSQLSrvTableExist(pszTableName,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::GetSQLSrvTableStru(LPCTSTR pszTableName,Ttable &arFields,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSQLSrvTableStru(pszTableName,arFields,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::GetSQLSrvTableStru(LPCTSTR pszTableName,CStringList &listField,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSQLSrvTableStru(pszTableName,listField,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::GetTableStructInfoEx(LPCTSTR pszTableName,Ttable& arFields)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetTableStructInfoEx(pszTableName,arFields);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::DeleteTable(LPCTSTR pszTableName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->DeleteTable(pszTableName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::DeleteTable(CStringArray& arTableNames)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->DeleteTable(arTableNames);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::DeleteTableFields(LPCTSTR pszTableName,CStringArray& arFields,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->DeleteTableFields(pszTableName,arFields,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::DeleteTableFields(LPCTSTR pszTableName,LPCTSTR pszFields,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->DeleteTableFields(pszTableName,pszFields,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::AppendTableFields(LPCTSTR pszTableName,Ttable &arFields,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->AppendTableFields(pszTableName,arFields,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::AppendTableFields(LPCTSTR pszTableName, CUIITableField& arFields,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->AppendTableFields(pszTableName,arFields,pszDbName);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,CString& sValue)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,sValue);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,CStringArray &arStrValue)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,arStrValue);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,CStringArray &arStrValue, int nFr, int nTo)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,arStrValue,nFr,nTo);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL, std::vector<CString>& arStrValue)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL, arStrValue);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::IsSelEmpty(LPCTSTR pszStrSQL)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->IsSelEmpty(pszStrSQL);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,CStringList &listStrValue,BOOL bMakeLower)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,listStrValue,bMakeLower);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,CStringList &listStrValue,int nFr,int nTo,BOOL bMakeLower)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,listStrValue,nFr,nTo,bMakeLower);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,CUIIValueTable &valueTable,BOOL bUpdateLable)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,valueTable,bUpdateLable);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,CUIIValueTable &valueTable,int nFr, int nTo,BOOL bUpdateLable)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,valueTable,nFr,nTo,bUpdateLable);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszSKey_ValueSQL,CMapStringToString &mapKey_Value)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszSKey_ValueSQL,mapKey_Value);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszSKey_ValueSQL, std::map<CString, CString>& mapKey_Value)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszSKey_ValueSQL, mapKey_Value);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelDataEx(LPCTSTR pszSelectSQL,CMapStringToString &mapFieldToValue)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelDataEx(pszSelectSQL,mapFieldToValue);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelDataEx(LPCTSTR pszSelectSQL, std::map<CString, CString>& mapFieldToValue)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelDataEx(pszSelectSQL, mapFieldToValue);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelDataEx(LPCTSTR pszSelectSQL, std::vector<std::vector<CString>>& datas)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelDataEx(pszSelectSQL, datas);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelDataEx(LPCTSTR pszSelectSQL, std::vector<std::map<CString, CString>> &datas)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelDataEx(pszSelectSQL, datas);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelData(LPCTSTR pszStrSQL,_variant_t &vResults,long &lAdoRow,long &lAdoCol)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->GetSelData(pszStrSQL,vResults,lAdoRow,lAdoCol);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void CUIIADORXServer::GetSQLSrvTableNames(CStringList& listTables,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->GetSQLSrvTableNames(listTables,pszDbName);
|
|
}
|
|
}
|
|
|
|
void CUIIADORXServer::GetSQLSrvTableNames(CStringArray& arTables,LPCTSTR pszDbName)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->GetSQLSrvTableNames(arTables,pszDbName);
|
|
}
|
|
}
|
|
|
|
void CUIIADORXServer::GetTableNameArray(CStringArray& arTables,LPCTSTR pszTableType)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->GetTableNameArray(arTables,pszTableType);
|
|
}
|
|
}
|
|
|
|
void CUIIADORXServer::GetOLDBTableNameList(CStringList &listTables,LPCTSTR pszTableType)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->GetOLDBTableNameList(listTables,pszTableType);
|
|
}
|
|
}
|
|
|
|
void CUIIADORXServer::GetOLDBTableNameArray(CStringArray &arTables,LPCTSTR pszTableType)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
pImpSrv->GetOLDBTableNameArray(arTables,pszTableType);
|
|
}
|
|
}
|
|
|
|
|
|
static void SplitStrintToArray(LPCTSTR pszDescr,CStringArray& arInfo,TCHAR tcSpace)
|
|
{
|
|
if (pszDescr == NULL) return;
|
|
|
|
CString sDescr = pszDescr;
|
|
int nLen = sDescr.GetLength();
|
|
int i = 0;
|
|
CString sText = _T("");
|
|
TCHAR tchar = _T('\0');
|
|
|
|
for(i = 0;i < nLen;i++)
|
|
{
|
|
tchar = sDescr.GetAt(i);
|
|
if(tchar == tcSpace)
|
|
{
|
|
arInfo.Add(sText);
|
|
sText = _T("");
|
|
}
|
|
else
|
|
{
|
|
sText += tchar;
|
|
}
|
|
|
|
if(i == nLen - 1 && !sText.IsEmpty())
|
|
{
|
|
arInfo.Add(sText);
|
|
}
|
|
}
|
|
}
|
|
|
|
int CUIIADORXServer::InsertBlob(LPCTSTR pszSQL,void* pData,int nSize)
|
|
{
|
|
//insert into aecesign (id,name,login,password,descr,filename,guid,dwgimage) values (%d,'%s','%s','%s','%s','%s','%s',?)
|
|
CString sText = pszSQL;
|
|
sText.MakeLower();
|
|
int nFr = sText.Find(_T('('));
|
|
int nTo = sText.Find(_T(')'));
|
|
|
|
CString sFields,sValues,sTableName;
|
|
if (nFr != -1 && nTo != -1)
|
|
{
|
|
//(1234)
|
|
sFields = sText.Mid(nFr + 1,nTo - nFr - 1);
|
|
|
|
nFr = sText.Find(_T('('),nTo);
|
|
nTo = sText.Find(_T(')'),nFr);
|
|
|
|
if (nFr != -1 && nTo != -1)
|
|
{
|
|
sValues = sText.Mid(nFr + 1,nTo - nFr - 1);
|
|
|
|
nFr = sText.Find(_T("into"));
|
|
nTo = sText.Find(_T('('));
|
|
|
|
//into table (
|
|
sTableName = sText.Mid(nFr + 4,nTo - nFr - 4);
|
|
|
|
CStringArray arFields,arValues;
|
|
|
|
sFields.TrimLeft();
|
|
sFields.TrimRight();
|
|
sValues.TrimRight();
|
|
sValues.TrimLeft();
|
|
|
|
SplitStrintToArray(sFields,arFields,_T(','));
|
|
SplitStrintToArray(sValues,arValues,_T(','));
|
|
|
|
if (arFields.GetSize() == arValues.GetSize())
|
|
{
|
|
CUIIValueTable packagetable;
|
|
CStringArray arRec;
|
|
CString sName,sVale,sPackField;
|
|
|
|
for (int i = 0;i < arFields.GetSize();i++)
|
|
{
|
|
sName = arFields.GetAt(i);
|
|
sVale = arValues.GetAt(i);
|
|
|
|
sName.TrimLeft();
|
|
sName.TrimRight();
|
|
sVale.TrimLeft();
|
|
sVale.TrimRight();
|
|
|
|
if (sVale.CompareNoCase(_T("?")) == 0)//
|
|
{
|
|
sPackField = sName;
|
|
continue;
|
|
}
|
|
|
|
if (sVale.Find(_T("'")) != -1)
|
|
{
|
|
sVale.TrimLeft(_T("'"));
|
|
sVale.TrimRight(_T("'"));
|
|
|
|
arRec.Add(sName);
|
|
arRec.Add(sVale);
|
|
arRec.Add(_T("varchar"));
|
|
packagetable.AddValueRecord(arRec);
|
|
arRec.RemoveAll();
|
|
}
|
|
else if (sVale.Find(_T(".")) != -1)//小数
|
|
{
|
|
arRec.Add(sName);
|
|
arRec.Add(sVale);
|
|
arRec.Add(_T("float"));
|
|
packagetable.AddValueRecord(arRec);
|
|
arRec.RemoveAll();
|
|
}
|
|
else //按整型
|
|
{
|
|
arRec.Add(sName);
|
|
arRec.Add(sVale);
|
|
arRec.Add(_T("int"));
|
|
packagetable.AddValueRecord(arRec);
|
|
arRec.RemoveAll();
|
|
}
|
|
}
|
|
|
|
CUIIPackageDbOper packageDb;
|
|
packageDb.SetDbSrv(this);
|
|
|
|
if ( !sPackField.IsEmpty())
|
|
{
|
|
return packageDb.PutPackageToDb(pData,nSize,sTableName,sPackField,packagetable);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int CUIIADORXServer::InsertBlob(LPCTSTR pszSQL,LPCTSTR pszFile)
|
|
{
|
|
_bstr_t bst(pszFile);
|
|
char* psFile = (char*)bst;
|
|
|
|
FILE* pFile = NULL;
|
|
#if ARX==16
|
|
pFile = fopen(psFile,"rb");
|
|
#else
|
|
fopen_s(&pFile,psFile,"rb");
|
|
#endif
|
|
byte* pData = NULL;
|
|
long l_file_size = 0;
|
|
|
|
if (pFile)
|
|
{
|
|
fseek(pFile,0,SEEK_END);
|
|
l_file_size = ftell(pFile);
|
|
fseek(pFile,0,SEEK_SET);
|
|
|
|
pData = new byte[l_file_size];
|
|
fread(pData,1,l_file_size,pFile);
|
|
fclose(pFile);
|
|
int nResult = 0;
|
|
|
|
#ifdef ZIP_DATA
|
|
//压缩
|
|
uLong ldestLen = compressBound(l_file_size);
|
|
byte* pDest = new byte[ldestLen + sizeof(l_file_size)];
|
|
|
|
compress(pDest,&ldestLen,pData,l_file_size);
|
|
byte* pOffSize = pDest + ldestLen;
|
|
memcpy(pOffSize,&l_file_size,sizeof(l_file_size));
|
|
nResult = InsertBlob(pszSQL,pDest,(int)(ldestLen + sizeof(l_file_size) ) );
|
|
delete [] pDest;
|
|
#else
|
|
nResult = InsertBlob(pszSQL,pData,(int)(l_file_size ) );
|
|
#endif
|
|
delete [] pData;
|
|
return nResult;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int CUIIADORXServer::UpdateBlob(LPCTSTR pszSQL,void* pData,int nSize)
|
|
{
|
|
// sSQL.Format(_T("update aecesign set bmpimage=? where id=%d"),nId);
|
|
// m_pDbSrv->UpdateBlob(sSQL,sBmpFile);
|
|
|
|
CString sText = pszSQL;
|
|
sText.MakeLower();
|
|
int nFr = sText.Find(_T("set"));
|
|
int nTo = sText.Find(_T("=?"));
|
|
|
|
if (nFr != -1 && nTo != -1)
|
|
{
|
|
//set bmpimage=?
|
|
CString sPackageField = sText.Mid(nFr + 3,nTo - nFr - 3);
|
|
sPackageField.TrimLeft();
|
|
sPackageField.TrimRight();
|
|
|
|
CUIIPackageDbOper packageDb;
|
|
packageDb.SetDbSrv(this);
|
|
|
|
return packageDb.UpdatePackage(sText,sPackageField,pData,nSize);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int CUIIADORXServer::UpdateBlob(LPCTSTR pszSQL,LPCTSTR pszFile)
|
|
{
|
|
// sSQL.Format(_T("update aecesign set bmpimage=? where id=%d"),nId);
|
|
// m_pDbSrv->UpdateBlob(sSQL,sBmpFile);
|
|
|
|
CString sText = pszSQL;
|
|
sText.MakeLower();
|
|
int nFr = sText.Find(_T("set"));
|
|
int nTo = sText.Find(_T("=?"));
|
|
|
|
if (nFr != -1 && nTo != -1)
|
|
{
|
|
CUIIPackageDbOper packageDb;
|
|
packageDb.SetDbSrv(this);
|
|
|
|
CString sFile = pszFile;
|
|
_bstr_t bst(pszFile);
|
|
char* psFile = (char*)bst;
|
|
|
|
FILE* pFile = NULL;
|
|
#if ARX==16
|
|
pFile = fopen(psFile,"rb");
|
|
#else
|
|
fopen_s(&pFile,psFile,"rb");
|
|
#endif
|
|
byte* pData = NULL;
|
|
long l_file_size = 0;
|
|
|
|
if (pFile)
|
|
{
|
|
fseek(pFile,0,SEEK_END);
|
|
l_file_size = ftell(pFile);
|
|
fseek(pFile,0,SEEK_SET);
|
|
|
|
pData = new byte[l_file_size];
|
|
fread(pData,1,l_file_size,pFile);
|
|
fclose(pFile);
|
|
|
|
int nResult = 0;
|
|
#ifdef ZIP_DATA
|
|
//压缩
|
|
uLong ldestLen = compressBound(l_file_size);
|
|
byte* pDest = new byte[ldestLen + sizeof(l_file_size) ];
|
|
compress(pDest,&ldestLen,pData,l_file_size);
|
|
|
|
byte* pOffSize = pDest + ldestLen;
|
|
memcpy(pOffSize,&l_file_size,sizeof(l_file_size));
|
|
|
|
nResult = UpdateBlob(pszSQL,pDest,(int)(ldestLen + sizeof(l_file_size) ) );
|
|
delete [] pDest;
|
|
#else
|
|
nResult = UpdateBlob(pszSQL,pData,(int)( l_file_size ) );
|
|
#endif
|
|
delete [] pData;
|
|
return nResult;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelBlob(LPCTSTR pszSQL,void*& pData,int& nSize)
|
|
{
|
|
// sFile = _T("temp$$.equ");
|
|
// sSQL.Format(_T("select package from aec_package where ID=%d"),_ttoi(sID));
|
|
|
|
// sSQL.Format(_T("update aecesign set bmpimage=? where id=%d"),nId);
|
|
// m_pDbSrv->UpdateBlob(sSQL,sBmpFile);
|
|
|
|
CString sText = pszSQL;
|
|
sText.MakeLower();
|
|
int nFr = sText.Find(_T("set"));
|
|
int nTo = sText.Find(_T("=?"));
|
|
|
|
if (nFr != -1 && nTo != -1)
|
|
{
|
|
//set bmpimage=?
|
|
CString sPackageField = sText.Mid(nFr + 3,nTo - nFr - 3);
|
|
sPackageField.TrimLeft();
|
|
sPackageField.TrimRight();
|
|
|
|
CUIIPackageDbOper packageDb;
|
|
packageDb.SetDbSrv(this);
|
|
|
|
CString sFile = _T("temp$$.tmp");
|
|
if ( packageDb.OutPackageToFile(sFile,sText,sPackageField,FALSE) )
|
|
{
|
|
CFileException eFile;
|
|
CFile fileSave;
|
|
|
|
if (!fileSave.Open(sFile,CFile::modeReadWrite|CFile::shareDenyWrite|CFile::shareDenyRead|CFile::typeBinary,&eFile) )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
_variant_t varChunk;
|
|
long nLength = (long)fileSave.GetLength();
|
|
BYTE* pbuf;
|
|
pbuf = new BYTE[nLength];
|
|
if(pbuf == NULL)
|
|
return FALSE;
|
|
|
|
fileSave.Read(pbuf,nLength);
|
|
fileSave.Close();
|
|
|
|
pData = pbuf;
|
|
nSize = nLength;
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int CUIIADORXServer::GetSelBlob(LPCTSTR pszSQL,LPCTSTR pszFilePath)
|
|
{
|
|
// sFile = _T("temp$$.equ");
|
|
// sSQL.Format(_T("select package from aec_package where ID=%d"),_ttoi(sID));
|
|
|
|
CString sText = pszSQL;
|
|
sText.MakeLower();
|
|
int nFr = sText.Find(_T("select"));
|
|
int nTo = sText.Find(_T("from"));
|
|
|
|
if (nFr != -1 && nTo != -1)
|
|
{
|
|
CString sPackageField = sText.Mid(nFr + 6,nTo - nFr - 6);
|
|
sPackageField.TrimLeft();
|
|
sPackageField.TrimRight();
|
|
|
|
CUIIPackageDbOper packageDbOper;
|
|
packageDbOper.SetDbSrv(this);
|
|
|
|
CString sFile = pszFilePath;
|
|
if ( packageDbOper.OutPackageToFile(sFile,sText,sPackageField,TRUE) )
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::ExecuteSQL(LPCTSTR pszStrSQL)
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->ExecuteSQL(pszStrSQL);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CUIIADORXServer::IsDatabaseOpen()
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
return pImpSrv->IsDatabaseOpen();
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
IDispatch* CUIIADORXServer::GetConnectionPtr()
|
|
{
|
|
if (m_pImp != NULL)
|
|
{
|
|
CUIIImpADORXServer* pImpSrv = (CUIIImpADORXServer*)m_pImp;
|
|
_ConnectionPtr pConnect = pImpSrv->GetConnectionPtr();
|
|
return pConnect.Detach();
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
void CUIIADORXServer::BeginTrans()
|
|
{
|
|
_ConnectionPtr pConnect(GetConnectionPtr());
|
|
pConnect->BeginTrans();
|
|
}
|
|
|
|
void CUIIADORXServer::RollbackTrans()
|
|
{
|
|
_ConnectionPtr pConnect(GetConnectionPtr());
|
|
pConnect->RollbackTrans();
|
|
}
|
|
|
|
void CUIIADORXServer::CommitTrans()
|
|
{
|
|
_ConnectionPtr pConnect(GetConnectionPtr());
|
|
pConnect->CommitTrans();
|
|
}
|