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

📄 dbbaseclass.cpp

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


#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 + -