📄 db2lib.cpp
字号:
SQLRETURN rc ;
SQLSMALLINT nresultcols, i ;
SQLINTEGER displaysize ;
SQLINTEGER outlen[256] ;
/* Get result set column number*/
rc = SQLNumResultCols( m_hstmt, &nresultcols ) ;
m_colCount = nresultcols;
if ( rc != SQL_SUCCESS)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy(m_errorMsg, "金证标准存储过程执行失败");
return false;
}
/* if have result set, bind columns to program vars*/
if ( nresultcols > 0)
{
for ( i = 0; i < nresultcols; i++ )
{
SQLDescribeCol( m_hstmt,
( SQLSMALLINT ) ( i + 1 ),
m_colInfo[i].Name,
sizeof(m_colInfo[i].Name),
&(m_colInfo[i].NameLen),
&(m_colInfo[i].Type),
&(m_colInfo[i].MaxLength),
&(m_colInfo[i].Precision),
NULL
) ;
/* get display length for column */
SQLColAttribute( m_hstmt,
( SQLSMALLINT ) ( i + 1 ),
SQL_DESC_DISPLAY_SIZE,
NULL,
0,
NULL,
&displaysize
) ;
/*
Set column length to max of display length,
and column name length. Plus one byte for
null terminator.
*/
m_colInfo[i].MaxLength = max( (size_t)displaysize,strlen( ( char * ) m_colInfo[i].Name )) + 1 ;
/* bind columns to program vars, converting all types to CHAR */
SQLBindCol( m_hstmt,
( SQLSMALLINT ) ( i + 1 ),
SQL_C_CHAR,
m_data[i],
m_colInfo[i].MaxLength,
&outlen[i]
) ;
}
}
return true;
}
bool CDb2lib::Run20(const char *CommandStr, char *Param[], int ParamNum)
{
SQLRETURN rc ;
SQLSMALLINT nresultcols;
SQLINTEGER ErrMsgOutLen;
if (Run(CommandStr, Param, ParamNum) == true)
{
/* Get the first result set for m_errorcode an m_errormsg */
rc = SQLNumResultCols( m_hstmt, &nresultcols ) ;
if ( rc != SQL_SUCCESS)
handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
if (nresultcols != 2)
{
m_errorCode = -1;
strcpy(m_errorMsg, "非金证标准存储过程");
return false;
}
SQLBindCol(m_hstmt,1,SQL_C_LONG,&m_errorCode,0,&ErrMsgOutLen) ;
SQLBindCol(m_hstmt,2,SQL_C_CHAR,(SQLCHAR*)m_errorMsg,256,&ErrMsgOutLen) ;
rc = SQLFetch( m_hstmt ) ;
if ( (rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO) && (rc != SQL_NO_DATA_FOUND) )
{
handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy(m_errorMsg, "金证标准存储过程执行失败");
return false;
}
/* if have next result set, bind columns to program vars */
rc = SQLMoreResults(m_hstmt);
if ( rc == SQL_SUCCESS)
{
if ( !Bind() )
return false;
memset(m_data, 0, sizeof(m_data));
}
else if ( rc != SQL_NO_DATA_FOUND)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy(m_errorMsg, "金证标准存储过程执行失败");
return false;
}
}
else
{
return false;
}
return true;
}
bool CDb2lib::Run20Error(const char *CommandStr, char *Param[], int ParamNum)
{
#ifdef __BORLANDC__
Run(CommandStr, Param, ParamNum);
if(GetErrorCode() == 0)
{
return true;
}
else
{
MessageBox(Screen->ActiveForm->Handle, GetErrorMsg(), "系统提示信息", MB_OK | MB_ICONSTOP);
return false;
}
#else
return false;
#endif
}
bool CDb2lib::Run20Message(const char *CommandStr, char *Param[], int ParamNum)
{
#ifdef __BORLANDC__
Run(CommandStr, Param, ParamNum);
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 CDb2lib::MoveNext()
{
SQLRETURN MutiResults_rc ;
SQLRETURN MutiRows_rc ;
/* Fetch the result set data, if fetch data fail, return false*/
MutiRows_rc = SQLFetch( m_hstmt ) ;
if ( MutiRows_rc == SQL_NO_DATA_FOUND)
{
/* if the current result set have not data, get next result set*/
MutiResults_rc = SQLMoreResults(m_hstmt);
/* if have next result set, bind columns to program vars and fetch result set data*/
if (MutiResults_rc == SQL_SUCCESS)
{
memset(m_data, 0, sizeof(m_data));
Bind();
MutiRows_rc = SQLFetch( m_hstmt ) ;
if ( MutiRows_rc == SQL_NO_DATA_FOUND)
{
EndTran();
return false;
}
else if (MutiRows_rc !=SQL_SUCCESS)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy(m_errorMsg, "金证标准存储过程取结果集失败");
EndTran();
return false;
}
else
return true;
}
else if (MutiResults_rc != SQL_NO_DATA_FOUND)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy(m_errorMsg, "金证标准存储过程取结果集失败");
EndTran();
return false;
}
EndTran();
return false;
}
else if (MutiRows_rc !=SQL_SUCCESS)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy(m_errorMsg, "金证标准存储过程取结果集失败");
EndTran();
return false;
}
m_rowCount++;
return true;
}
bool CDb2lib::Cancel()
{
/* Cancel prematurely terminate the data-at-execution sequence */
if (SQLCancel(m_hstmt) != SQL_SUCCESS)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
return false;
}
return true;
}
const SDBCOL * CDb2lib::GetColInfo(int index)
{
/* Get column informations by columns index*/
if(m_errorCode != 0 || m_colCount <= 0 || index >= m_colCount)
return (const SDBCOL *)NULL;
return &m_colInfo[index];
}
const SDBCOL * CDb2lib::GetColInfo(const char * colName)
{
int index;
/* Get column informations by columns name*/
for(index = 0; index < m_colCount; index ++)
{
if(stricmp((char *)(m_colInfo[index].Name), (char *)colName) == 0)
return GetColInfo(index);
}
return (const SDBCOL *)NULL;
}
char * CDb2lib::GetColData(int index)
{
/* Get column data by column index*/
if(m_errorCode != 0 || m_colCount <= 0 || index >= m_colCount)
return (char *)"";
return (char *)m_data[index];
}
char * CDb2lib::GetColData(const char * colName)
{
int index;
/* Get column data by column name*/
for(index = 0; index < m_colCount; index ++)
{
if(stricmp((char *)(m_colInfo[index].Name), (char *)colName) == 0)
return GetColData(index);
}
return (char *)"";
}
bool CDb2lib::EndTran()
{
SQLRETURN rc ;
/* Ends processing on the statement referenced by the statement handle*/
rc = SQLEndTran( SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT ) ;
if (rc !=SQL_SUCCESS)
{
handle_error( SQL_HANDLE_DBC, m_hdbc, rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
return false;
}
rc = SQLFreeStmt( m_hstmt, SQL_UNBIND ) ;
if (rc !=SQL_SUCCESS)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
return false;
}
rc = SQLFreeStmt( m_hstmt, SQL_RESET_PARAMS ) ;
if (rc !=SQL_SUCCESS)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
return false;
}
rc = SQLFreeStmt( m_hstmt, SQL_CLOSE ) ;
if (rc !=SQL_SUCCESS)
{
handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
m_errorCode = m_dbErrorInfo.SqlCode;
strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
return false;
}
return true;
}
int CDb2lib::GetErrorCode()
{
return m_errorCode;
}
const char * CDb2lib::GetErrorMsg()
{
return m_errorMsg;
}
const CDbErrorInfo * CDb2lib::GetDbErrorInfo()
{
return &m_dbErrorInfo;
}
USHORT CDb2lib::GetServerList(CServerList * serverList)
{
SQLSMALLINT buffl, desl ;
SQLRETURN rc ;
int Num = 0;
while(1)
{ rc = SQLDataSources( m_henv,
SQL_FETCH_NEXT,
serverList[Num].ServerName,
SQL_MAX_DSN_LENGTH + 1,
&buffl,
serverList[Num].Description,
255,
&desl
);
if( (rc != SQL_NO_DATA_FOUND) && (rc != SQL_NO_DATA_FOUND) && (rc != SQL_NO_DATA_FOUND))
{
handle_error( SQL_HANDLE_ENV, m_henv, rc) ;
return -1;
}
else if(rc == SQL_NO_DATA_FOUND)
Num++ ;
else
break;
}
return Num;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -