📄 dbbaseclass.cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include <vcl.h>
#include "dbbaseclass.h"
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <time.h>
#include <stdlib.h >
#include <windef.h>
#include <odbcinst.h>
#include <dir.h >
#include <string.h >
#include <winbase.h>
#include <sys/stat.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
void UpperStr(char *in,char *out)
{
int strlength = strlen(in);
for(int id=0;id<strlength;id++)
{
if(in[id]>='a'&&in[id]<='z')
out[id]=in[id]+'A'-'a';
else
out[id] = in[id];
}
out[strlength] = 0;
}
void UpperStr2(char *in,char *out)
{
int strlength = strlen(in);
for(int id=0;id<strlength;id++)
{
if(!( (in[id]>='a'&&in[id]<='z')
||(in[id]>='A'&&in[id]<='Z')
||(in[id]>='0'&&in[id]<='9')
||in[id]=='_') )
break;
if(in[id]>='a'&&in[id]<='z')
out[id]=in[id]+'A'-'a';
else
{
out[id] = in[id];
}
}
out[strlength] = 0;
}
CDBFaceBase::CDBFaceBase()
{
strcpy(m_Err,"未知错误");
// m_pSql = NULL;
// iSqlBuffLen = 0;
iRecordCount=-1;
m_Driver[0] = 0;
strcpy(m_ClassName,"");
m_adMain = new TADOConnection(NULL);
m_adQuery = new TADOQuery(NULL);
m_Data = NULL;
}
CDBFaceBase::~CDBFaceBase()
{
CloseDB();
delete m_adQuery;
delete m_adMain;
// if(m_pSql)
// free(m_pSql);
// iSqlBuffLen = 0;
if(m_Data)
delete m_Data;
}
bool CDBFaceBase::CreateDSN (char * szAttributes)
{
char *startpos,*pos;
startpos=szAttributes;
while(1)
{
pos=strstr(startpos,"\\0");
if(pos)
{
pos[0]=0;
pos++;
for(int id=0;id<(int)strlen(pos);id++)
pos[id]=pos[id+1];
}
else
break;
startpos=pos;
}
if(SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,m_Driver,szAttributes)!=1)
return false;
return true;
}
bool CDBFaceBase::CreateDB (char * szDBName)
{
char cmd[256];
sprintf(cmd,"Drop DATABASE %s",szDBName);
ExecSQLCmd(cmd);
sprintf(cmd,"CREATE DATABASE %s;USE %s",
szDBName,szDBName);
return ExecSQL(cmd,NULL);
}
bool CDBFaceBase::ConnectDB (char *szhostserver,char *szUser,char *szPassWord,char *szDBName)
{
char szConStr[1024]={0};
char sztmp[56]={0};
//无DSN连接
sprintf(szConStr,"DRIVER=%s",m_Driver);
if(szhostserver)
{
sprintf(sztmp,";SERVER=%s",szhostserver);
strcat(szConStr,sztmp);
}
if(szUser)
{
sprintf(sztmp,";UID=%s",szUser);
strcat(szConStr,sztmp);
}
if(szPassWord)
{
sprintf(sztmp,";PWD=%s",szPassWord);
strcat(szConStr,sztmp);
}
if(szDBName)
{
sprintf(sztmp,";DATABASE=%s",szDBName);
strcat(szConStr,sztmp);
}
return ConnectDBByStr(szConStr);
}
bool CDBFaceBase::ConnectDBByStr (char *szConnectStr)
{
// SQLDriverConnect(
/* AnsiString sConnStr;
sConnStr ="Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source="
+ ExtractFilePath(Application->ExeName) + "sfInfo.dat" +";"
+ "Mode=Share Deny None;Extended Properties=\"\";"
+ "Persist Security Info=True;Jet OLEDB:System database=\"\";"
+ "Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"lxl_xxx\";"
+ "Jet OLEDB:Engine Type=5;";*/
if (m_adMain->Connected)
m_adMain->Connected = false;
m_adMain->ConnectionString = szConnectStr;
try
{
m_adMain->LoginPrompt = false;
m_adMain->Connected = true;
m_adMain->KeepConnection = true;
m_adQuery->Connection = m_adMain;
}
catch (Exception &exception)
{
strncpy(m_Err,exception.Message.c_str(),sizeof(m_Err)-1);
// ShowError(Handle, exception.HelpContext, "程序初始化错误",
// "打开本地数据库失败", exception.Message, false);
// Application->Terminate();
return false;
}
return m_adMain->Connected;
}
bool CDBFaceBase::UseDB (char *szDBName)
{
char sql[560];
sprintf(sql,"use %s",szDBName);
return ExecSQLCmd(sql);
}
bool CDBFaceBase::CloseDB ()
{
if (m_adMain->Connected)
m_adMain->Connected = false;
return true;
}
bool CDBFaceBase::GetAllDB (char * szDB,int iSize)
{
return false;
}
bool CDBFaceBase::GetAllUser (DB_USER_INFO * szUser,int iInNum,int *iOutNum)
{
return false;
}
bool CDBFaceBase::SetUserRole (DB_USER_INFO *useinfo,char *szDB)
{
return false;
}
bool CDBFaceBase::DeleteUser (DB_USER_INFO *szUser)
{
return false;
}
/*bool CDBFaceBase::DeleteUser (char *username)
{
return false;
}
*/
bool CDBFaceBase::ExecSQLCmd(char * szSQL)
{
bool iRet;
UpperStr(szSQL,szSQL);
try
{
m_adQuery->Close();
m_adQuery->SQL->Clear();
//m_adQuery->SQL->Text = szSQL;
m_adQuery->SQL->Add(szSQL);
iRet = m_adQuery->ExecSQL();
}
catch (Exception &exception)
{
strncpy(m_Err,exception.Message.c_str(),sizeof(m_Err)-1);
//ShowError(NULL, exception.HelpContext, "数据库操作出错",
// "执行SQL语句异常", exception.Message, false);
iRet = false;
}
return iRet;
}
bool CDBFaceBase::ExecSQL(char * szSQL,void *callback)
{
char c,*strstart,*pos,*exesql;
// if(!mDatabase->Connected&&!->Active)
// return false;
strstart=szSQL;
bool ignoeflag = false;
TDB_CALLBACK DB_CallBack = (TDB_CALLBACK)callback;
int sqllen = strlen(szSQL);
// int currpos = 0;
while(strstart[0])
{
while(strstart[0]==' '||strstart[0]=='\n'||strstart[0]=='\r')
strstart++;
//忽略空格和注释
while(1)
{
if(strstart[0]=='#') //注释
{
while(strstart[0]&&(strstart[0]!='\n'&&strstart[0]!='\r'))
strstart++;
while(strstart[0]==' '||pos[0]=='\n'||strstart[0]=='\r') //忽略空
strstart++;
}
else
break;
}
pos=strstart;
while(pos[0])
{
if(*pos=='\'' && *(pos-1)!='\\' && pos!=strstart)
ignoeflag=!ignoeflag;
if(!ignoeflag && pos[0]==';') //取得一条语句
break;
pos++;
}
if(strstart==pos) //无语句
{
if(!pos[0]) //如果字符串结束
break;
pos++;
continue;
}
exesql=new char[pos-strstart+1];
if(!exesql)
return 0;
memset(exesql,0,pos-strstart+1);
memcpy(exesql,strstart,pos-strstart);
c=pos[0];
if(DB_CallBack)
DB_CallBack((pos-szSQL)*100/sqllen,exesql);
if(!ExecSQLCmd(exesql))
{
delete exesql;
return false;
}
if(*pos)
pos++;
delete exesql;
if(!pos[0]||!c) //如果字符串结束
break;
strstart=pos;
}
if(DB_CallBack)
DB_CallBack(100,"end");
return true;
}
bool CDBFaceBase::ExecSQLFile(char * szSQLFile,void *callback)
{
struct stat statbuf;
char *buff;
stat(szSQLFile,&statbuf);
FILE *fp=fopen(szSQLFile,"rb");
if(fp==NULL)
{
strcpy(m_Err,"不能打开初始化数据库的执行文件!");
return false;
}
buff=new char[statbuf.st_size+1];
memset(buff,0,statbuf.st_size+1);
fread(buff,statbuf.st_size,1,fp);
fclose(fp);
if(!ExecSQL(buff,callback))
{
// strcpy(ErrInfo,"执行初始化数据库文件失败!请检查SQL脚本!");
return false;
}
delete buff;
return true;
// return false;
}
void CDBFaceBase::AddSQL(char *sql)
{
// int iRet = true;
try
{
m_adQuery->Close();
m_adQuery->SQL->Clear();
m_adQuery->SQL->Add(sql);
}
catch (Exception &exception)
{
strncpy(m_Err,exception.Message.c_str(),sizeof(m_Err)-1);
// iRet = false;
}
// return iRet;
}
bool CDBFaceBase::SetParam(char *parm,char *value,int size,int type)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -