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

📄 dblib.cpp

📁 访问sybase 数据库的dblib (VC)封装
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    {
        MessageBox(Screen->ActiveForm->Handle, GetErrorMsg(), "系统提示信息", MB_OK | MB_ICONSTOP);
        return false;
    }
#else
    return false;
#endif
}

bool CDblib::Run20Message(const char *CommandStr, ...)
{
#ifdef __BORLANDC__
    char msg[1024];
    va_list arg_ptr;

    memset(msg, '@', sizeof(msg));
    va_start(arg_ptr, CommandStr);
    vsprintf(msg, CommandStr, arg_ptr);
    va_end(arg_ptr);

    __Run20(msg);

    if(GetErrorCode() == 0)
    {
        MessageBox(Screen->ActiveForm->Handle, GetErrorMsg(), "系统提示信息", MB_OK | MB_ICONINFORMATION);
        return true;
    }
    else
    {
        MessageBox(Screen->ActiveForm->Handle, GetErrorMsg(), "系统提示信息", MB_OK | MB_ICONSTOP);
        return false;
    }
#else
    return false;
#endif
}

bool CDblib::Bind()
{
    hasExtendColumn = false;
    m_colCount = (USHORT)dbnumcols(m_dbProcess);

    for(int i = 0; i < m_colCount; i++)
    {
//        dbcolinfo(m_dbProcess, CI_REGULAR, i + 1, i + 1, &col[i]);

        strcpy(m_colInfo[i].Name, dbcolname(m_dbProcess, i + 1));
        m_colInfo[i].Type = (SHORT)dbcoltype(m_dbProcess, i + 1);
        m_colInfo[i].MaxLength = dbcollen(m_dbProcess, i + 1);

        switch (m_colInfo[i].Type)
        {
            case SQLBIT:
            case SQLINT1:
                m_colInfo[i].MaxLength = 4;
                dbbind(m_dbProcess, i + 1, NTBSTRINGBIND, (DBINT)0, (BYTE *)m_data[i]);
                break;
            case SQLINT2:
                m_colInfo[i].MaxLength = 6;
                dbbind(m_dbProcess, i + 1, NTBSTRINGBIND, (DBINT)0, (BYTE *)m_data[i]);
                break;
            case SQLINT4:
                m_colInfo[i].MaxLength = 11;
                dbbind(m_dbProcess, i + 1, NTBSTRINGBIND, (DBINT)0, (BYTE *)m_data[i]);
                break;
            case SQLFLT4:
            case SQLFLT8:
            case SQLFLTN:
                m_colInfo[i].MaxLength = 16;
                dbbind(m_dbProcess, i + 1, NTBSTRINGBIND, (DBINT)0, (BYTE *)m_data[i]);
                break;
            case SQLMONEY4:
            case SQLMONEY:
            case SQLMONEYN:
            case SQLDECIMAL:
            case SQLNUMERIC:
                hasExtendColumn = true;
                m_colInfo[i].MaxLength = 16;
                dbbind(m_dbProcess, i + 1, FLT8BIND, (DBINT)0, (BYTE *)m_data[i]);
                break;
            case SQLDATETIME:
            case SQLDATETIMN:
            case SQLDATETIM4:
                hasExtendColumn = true;
                m_colInfo[i].MaxLength = 17;
                dbbind(m_dbProcess, i + 1, DATETIMEBIND, (DBINT)0, (BYTE *)m_data[i]);
                break;
            case SQLBINARY:
            case SQLVARBINARY:
                hasExtendColumn = true;
//                dbbind(m_dbProcess, i + 1, NTBSTRINGBIND, DBMAXCHAR, (BYTE *)m_data[i]);
                dbbind(m_dbProcess, i + 1, VARYBINBIND, DBMAXCHAR + 2, (BYTE *)m_data[i]);
                break;
            default:
                dbbind(m_dbProcess, i + 1, NTBSTRINGBIND, DBMAXCHAR, (BYTE *)m_data[i]);
                break;
        }
    }
    return true;
}

bool CDblib::MoveNext()
{
    double tempFloat;
    DBCHAR tempStr[DBMAXCHAR];
    DBINT ret;
    struct dbdaterec tempDate;

    ret = dbnextrow(m_dbProcess);
    if(ret == FAIL)
        return false;
    else if (ret == NO_MORE_ROWS)
    {
        while (dbresults(m_dbProcess) != NO_MORE_RESULTS)
        {
            memset(m_data, 0, sizeof(m_data));

            if(DBROWS(m_dbProcess)==SUCCEED)
            {
                Bind();
                ret = dbnextrow(m_dbProcess);
                if(ret == FAIL)
                    return false;
                else if(ret != NO_MORE_ROWS)
                    goto __fmt;
            }
        }
        if(dbchange(m_dbProcess))
            strcpy(m_databaseName, dbname(m_dbProcess));

        return false;
    }

__fmt:

    m_rowCount ++;

    if(hasExtendColumn == false)
        return true;

    for(int i = 0; i < m_colCount; i++)
    {
        switch(m_colInfo[i].Type)
        {
            case SQLMONEY4:
            case SQLMONEY:
            case SQLMONEYN:
                tempFloat = *(double *)m_data[i];
                sprintf(m_data[i], "%.2f", tempFloat);
                break;
            case SQLVARBINARY:
            case SQLBINARY:
//                dbconvert(m_dbProcess, m_colInfo[i].Type, ((DBVARYBIN *)m_data[i])->array, ((DBVARYBIN *)m_data[i])->len, SQLCHAR, tempStr, sizeof(tempStr));
                dbconvert(m_dbProcess, m_colInfo[i].Type, ((DBVARYBIN *)m_data[i])->array, min((int)(((DBVARYBIN *)m_data[i])->len), (DBMAXCHAR - 3) / 2), SQLCHAR, (BYTE *)tempStr, -1);
//                tempStr[((sizeof(m_data[i]) - 3) / 2) * 2] = 0;
                strcpy(m_data[i], "0x");
                strcat(m_data[i], tempStr);
                break;
            case SQLDATETIM4:
            case SQLDATETIME:
            case SQLDATETIMN:
                dbdatecrack(m_dbProcess, &tempDate, (DBDATETIME *) m_data[i]);
                sprintf(m_data[i], "%04d%02d%02d %02d:%02d:%02d",
                    tempDate.year, tempDate.month, tempDate.day,
                    tempDate.hour, tempDate.minute, tempDate.second);
                break;
        }
    }
    return true;
}

bool CDblib::FirstColInfo()
{
    return true;
}

bool CDblib::Use(const char * databaseName)
{
  m_errorCode = 0;
  strcpy(m_errorMsg, "执行存储过程成功");
  memset(&m_dbErrorInfo, 0, sizeof(CDbErrorInfo));

  dbuse(m_dbProcess, (char *)databaseName);
  m_errorCode = dbretstatus(m_dbProcess);
  if(m_errorCode == 0)
      strcpy(m_databaseName, dbname(m_dbProcess));
  return true;
}

bool CDblib::Cancel()
{
    if(m_dbmsVersion & dvSybase)
    {
        while( dbresults(m_dbProcess ) != NO_MORE_RESULTS )
            while(dbnextrow(m_dbProcess) != NO_MORE_ROWS);
    }
    else
        dbcancel(m_dbProcess);
    return false;
}

bool CDblib::Close()
{
    if(m_dbProcess)
        dbclose(m_dbProcess);
    Init();
    return true;
}

const SDBCOL * CDblib::GetColInfo(int index)
{
  if(m_errorCode != 0 || m_colCount <= 0 || index >= m_colCount)
    return (const SDBCOL *)NULL;
  return &m_colInfo[index];
}

const SDBCOL * CDblib::GetColInfo(const char * colName)
{
  int index;

  for(index = 0; index < m_colCount; index ++)
  {
      if(stricmp(m_colInfo[index].Name, colName) == 0)
          return GetColInfo(index);
  }

  return (const SDBCOL *)NULL;
}

char * CDblib::GetColData(int index)
{
  if(m_errorCode != 0 || m_colCount <= 0 || index >= m_colCount)
    return (char *)"";
  return m_data[index];
}

char * CDblib::GetColData(const char * colName)
{
  int index;

  for(index = 0; index < m_colCount; index ++)
  {
      if(stricmp(m_colInfo[index].Name, colName) == 0)
          return GetColData(index);
  }

  return (char *)"";
}

USHORT CDblib::GetServerList(CServerList * serverList)
{
    long ret;
    char * head = 0, * tail = 0;
    char allSrvName[1024];
    USHORT i;
    unsigned short srvNumber = 0;
    unsigned short validSrvNumber = 0;

    ret = dbserverenum(NET_SEARCH | LOC_SEARCH, allSrvName, 500, &srvNumber);
    if((ret == ENUM_SUCCESS || ret == MORE_DATA) && srvNumber > 0)
    {
        head = allSrvName;
        for(i = 0; i < srvNumber; i ++)
        {
            tail = strchr(head, 0);
            if(head[0] != 0)
            {
                memccpy(serverList[validSrvNumber].ServerName, head, tail - head + 1, 31);
                serverList[validSrvNumber].ServerName[MAXNAME - 1] = 0;
                validSrvNumber ++;
            }
            head = tail + 1;
        }
        return validSrvNumber;
    }
    return 0;
}

bool CDblib::LoadFunc()
{
#ifdef DLL_DBLIB
    if(!CDblib::hDLL)
    {
         CDblib::hDLL = LoadLibrary("NTWDBLIB.DLL");
         if (!CDblib::hDLL)
            {
                return false;
            }
    }

    //dbsetlogintime
    dbsetlogintime = (p_dbsetlogintime)GetProcAddress(CDblib::hDLL, "dbsetlogintime");
    if (!dbsetlogintime)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbmsghandle
    dbmsghandle = (p_dbmsghandle)GetProcAddress(CDblib::hDLL, "dbmsghandle");
    if (!dbmsghandle)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbinit
    dbinit = (p_dbinit)GetProcAddress(CDblib::hDLL, "dbinit");
    if (!dbinit)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dblogin
    dblogin = (p_dblogin)GetProcAddress(CDblib::hDLL, "dblogin");
    if (!dblogin)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbopen
    dbopen = (p_dbopen)GetProcAddress(CDblib::hDLL, "dbopen");
    if (!dbopen)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbsetlname
    dbsetlname = (p_dbsetlname)GetProcAddress(CDblib::hDLL, "dbsetlname");
    if (!dbsetlname)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbuse
    dbuse = (p_dbuse)GetProcAddress(CDblib::hDLL, "dbuse");
    if (!dbuse)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcmd
    dbcmd = (p_dbcmd)GetProcAddress(CDblib::hDLL, "dbcmd");
    if (!dbcmd)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcmdrow
    dbcmdrow = (p_dbcmdrow)GetProcAddress(CDblib::hDLL, "dbcmdrow");
    if (!dbcmdrow)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbsqlexec
    dbsqlexec = (p_dbsqlexec)GetProcAddress(CDblib::hDLL, "dbsqlexec");
    if (!dbsqlexec)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbsqlok
    dbsqlok = (p_dbsqlok)GetProcAddress(CDblib::hDLL, "dbsqlok");
    if (!dbsqlok)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbsqlsend
    dbsqlsend = (p_dbsqlsend)GetProcAddress(CDblib::hDLL, "dbsqlsend");
    if (!dbsqlsend)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //winexit
    dbwinexit = (p_dbwinexit)GetProcAddress(CDblib::hDLL, "dbwinexit");
    if (!dbwinexit)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbresults
    dbresults = (p_dbresults)GetProcAddress(CDblib::hDLL, "dbresults");
    if (!dbresults)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbnextrow
    dbnextrow = (p_dbnextrow)GetProcAddress(CDblib::hDLL, "dbnextrow");
    if (!dbnextrow)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbbind
    dbbind = (p_dbbind)GetProcAddress(CDblib::hDLL, "dbbind");
    if (!dbbind)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcancel
    dbcancel = (p_dbcancel)GetProcAddress(CDblib::hDLL, "dbcancel");
    if (!dbcancel)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbclose
    dbclose = (p_dbclose)GetProcAddress(CDblib::hDLL, "dbclose");
    if (!dbclose)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbclrbuf
    dbclrbuf = (p_dbclrbuf)GetProcAddress(CDblib::hDLL, "dbclrbuf");
    if (!dbclrbuf)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcollen
    dbcollen = (p_dbcollen)GetProcAddress(CDblib::hDLL, "dbcollen");
    if (!dbcollen)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcolname
    dbcolname = (p_dbcolname)GetProcAddress(CDblib::hDLL, "dbcolname");
    if (!dbcolname)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcoltype
    dbcoltype = (p_dbcoltype)GetProcAddress(CDblib::hDLL, "dbcoltype");
    if (!dbcoltype)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcolntype
    dbcolntype = (p_dbcolntype)GetProcAddress(CDblib::hDLL, "dbcolntype");
    if (!dbcolntype)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcolutype
    dbcolutype = (p_dbcolutype)GetProcAddress(CDblib::hDLL, "dbcolutype");
    if (!dbcolutype)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbcount
    dbcount = (p_dbcount)GetProcAddress(CDblib::hDLL, "dbcount");
    if (!dbcount)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbdata
    dbdata = (p_dbdata)GetProcAddress(CDblib::hDLL, "dbdata");
    if (!dbdata)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbdataready
    dbdataready = (p_dbdataready)GetProcAddress(CDblib::hDLL, "dbdataready");
    if (!dbdataready)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbdatlen
    dbdatlen = (p_dbdatlen)GetProcAddress(CDblib::hDLL, "dbdatlen");
    if (!dbdatlen)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbdatecrack
    dbdatecrack = (p_dbdatecrack)GetProcAddress(CDblib::hDLL, "dbdatecrack");
    if (!dbdatecrack)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbdead
    dbdead = (p_dbdead)GetProcAddress(CDblib::hDLL, "dbdead");
    if (!dbdead)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dberrhandle
    dberrhandle = (p_dberrhandle)GetProcAddress(CDblib::hDLL, "dberrhandle");
    if (!dberrhandle)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }

    /*//dbprocerrhandle
    dbprocerrhandle = (p_db)GetProcAddress(CDblib::hDLL, "dbprocerrhandle");
    if (!dbprocerrhandle)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    }
    //dbprocmsghandle
    dbprocmsghandle = (p_db)GetProcAddress(CDblib::hDLL, "dbprocmsghandle");
    if (!dbprocmsghandle)
    {
        FreeLibrary(CDblib::hDLL);
        return false;
    } */
    //dbfcmd

⌨️ 快捷键说明

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