📄 wzbase.cpp
字号:
iotype = SQL_PARAM_INPUT;
else{
iotype = SQL_PARAM_OUTPUT;
m_para->pVarArr[i].pcVal[0]='\0';
}
switch(m_para->pVarArr[i].vt)
{
case VT_PS:
sho = (short)atoi(m_para->pVarArr[i].pcVal);
*m_para->pVarArr[i].psVal = sho;
m_rc=SQLBindParameter(m_hstmt,i+2,iotype,SQL_C_SHORT,SQL_SMALLINT,0,0,m_para->pVarArr[i].psVal,0,&cb0);
break;
case VT_PI:
lon = atol(m_para->pVarArr[i].pcVal);
*m_para->pVarArr[i].piVal = lon;
m_rc=SQLBindParameter(m_hstmt,i+2,iotype,SQL_C_LONG,SQL_INTEGER,0,0,m_para->pVarArr[i].piVal,0,&cb0);
break;
case VT_PD:
dou = atof(m_para->pVarArr[i].pcVal);
*m_para->pVarArr[i].pdVal = dou;
m_rc=SQLBindParameter(m_hstmt,i+2,iotype,SQL_C_DOUBLE,SQL_FLOAT,0,0,m_para->pVarArr[i].pdVal,0,&cb0);
break;
case VT_PC:
m_rc=SQLBindParameter(m_hstmt,i+2,iotype,SQL_C_CHAR,SQL_VARCHAR,0,0,m_para->pVarArr[i].pcVal,m_para->pVarArr[i].len+1,&cbNTS);
break;
case VT_PB:
m_rc=SQLBindParameter(m_hstmt,i+2,iotype,SQL_C_BINARY,SQL_BINARY,0,0,m_para->pVarArr[i].pbVal,m_para->pVarArr[i].len+1,(SDWORD *)&(m_para->pVarArr[i].len));
break;
default:
m_rc=SQLBindParameter(m_hstmt,i+2,iotype,SQL_C_CHAR,SQL_VARCHAR,0,0,m_para->pVarArr[i].pcVal,m_para->pVarArr[i].len+1,&cbNTS);
break;
}
}
strcat(m_sqlstmt,"} ");
m_rc = SQLExecDirect(m_hstmt,(unsigned char *)m_sqlstmt,SQL_NTS);
if(m_rc == SQL_SUCCESS || m_rc == SQL_SUCCESS_WITH_INFO)
{
/****************************** add later ********************/
for(i=0;i<m_varnum;i++)
{
//if(m_para->pVarArr[i].io == IO_OUT)
{
switch(m_para->pVarArr[i].vt)
{
case VT_PS:
sho = *(m_para->pVarArr[i].psVal);
sprintf(m_para->pVarArr[i].pcVal,"%ld",sho);
break;
case VT_PI:
lon = *(m_para->pVarArr[i].piVal);
sprintf(m_para->pVarArr[i].pcVal,"%ld",lon);
break;
case VT_PD:
dou = *(m_para->pVarArr[i].pdVal);
sprintf(m_para->pVarArr[i].pcVal,"%.2lf",dou);
break;
default:
break;
}
}
}
/***************************************************/
if(!GetFet(id,m_hstmt,m_para,pres))
{
SQLFreeStmt(m_hstmt,SQL_DROP);
strcpy(pres->szErrMsg,"取结果集失败");
return FALSE;
}
SQLFreeStmt(m_hstmt,SQL_DROP);
DelPtr(id);
#ifdef LOGON
BaseLog(id,msg,2);
msg[0]=0;
sprintf(msg,"retcode = %d",m_ret);
if(strlen(szNotLogFun)>0)
{
if(strstr(msg,szNotLogFun))
BaseLog(id,msg,5);
else
BaseLog(id,msg,2);
}
else
BaseLog(id,msg,2);
#endif
strcpy(pres->szErrMsg,"执行成功");
pres->iRet = m_ret;
return TRUE;
}
else
{
DetErr(id,m_hstmt,m_rc);
SQLFreeStmt(m_hstmt,SQL_DROP);
strcpy(pres->szErrMsg,"执行存储过程失败");
return FALSE;
}
}
BOOL GetFet(int id,HSTMT m_hstmt,MyParams * m_para,pResult m_pres)
{
int i;
PTR rgbDesc = NULL; // pointer to storage for descriptor info
SWORD cbDescMax = 0; // max length of rgbDesc buffer
SWORD FAR pcbDesc = 0; // number of bytes returned in rgbDesc
SWORD nresultcols = 0; // number of result columns
RETCODE m_rc;
SQLNumResultCols(m_hstmt,&nresultcols);
if(nresultcols<=0)
{
while(SQLMoreResults(m_hstmt)!=SQL_NO_DATA_FOUND)
{
SQLNumResultCols(m_hstmt,&nresultcols);
if(nresultcols>0)
break;
}
}
if(nresultcols<=0)
{
m_para->bHasFet=FALSE;
m_para->RowNum=0;
m_para->FetNum=0;
m_pres->bHasRet=FALSE;
return TRUE;
}
else
m_para->bHasFet=TRUE;
m_para->FetNum = nresultcols;
if(nresultcols>MAXCOLS){
m_pres->retData.rtArray.iCol =MAXCOLS;
}
else
m_pres->retData.rtArray.iCol =nresultcols;
m_para->RowNum=0;
// Build the column description for this results set.
for (i = 0; i < nresultcols; i++)
{
if(i>=MAXCOLS){
SQLBindCol(m_hstmt,
i+1,
SQL_C_CHAR,
&m_para->pFetArr[MAXCOLS].pbVal,
MAXLEN,
&m_para->pFetArr[MAXCOLS].len);
}
else {
SQLBindCol(m_hstmt,
i+1,
SQL_C_CHAR,
&m_para->pFetArr[i].pbVal,
MAXLEN,
&m_para->pFetArr[i].len);
}
}
m_pres->retData.rtArray.iRow=0;
int rowcount=0;
while((m_rc=SQLFetch(m_hstmt)) != SQL_NO_DATA_FOUND)
{
if (!((SQL_SUCCESS == m_rc) ||(SQL_SUCCESS_WITH_INFO == m_rc)))
{
DetErr(id,m_hstmt,m_rc);
return FALSE;
}
if(rowcount > MAXROWS){
m_pres->iRetHandle=0;
m_pres->bHasNext=FALSE;
// m_pres->bHasNext=TRUE;
// m_pres->iRetHandle=id+1;//id+1,then always id!=0
//? pagedown
break;
}
for(i=0;i<m_pres->retData.rtArray.iCol;i++){
if(m_para->pFetArr[i].len>0){
memcpy(m_pres->retData.rtArray.Array[rowcount][i],
&m_para->pFetArr[i].pbVal,MAXLEN);
if(m_para->pFetArr[i].len<MAXLEN)
m_pres->retData.rtArray.Array[rowcount][i][m_para->pFetArr[i].len]=0;
}
else //by lsm 2000.01.05
m_pres->retData.rtArray.Array[rowcount][i][0]=0;
}
m_pres->retData.rtArray.iRow++;
rowcount ++;
}
m_para->RowNum = rowcount;
if(m_pres->retData.rtArray.iRow>0)
m_pres->bHasRet=FALSE;
return TRUE;
}
UWORD DetErr(int id,HSTMT m_hstmt,RETCODE retcode)
{
UCHAR szSqlState[30];
SDWORD pfNative[10];
SWORD cbMsgMax = 300;
SWORD cbMsgOut;
UCHAR szErrorMsg[301]="连接数据库失败,请重试!";
UWORD rc;
if(retcode ==0)
return 0;
switch(retcode)
{
case SQL_SUCCESS_WITH_INFO:
case SQL_ERROR:
case SQL_NEED_DATA:
case SQL_STILL_EXECUTING:
case SQL_INVALID_HANDLE:
SQLError(NULL, NULL, m_hstmt, szSqlState, pfNative, szErrorMsg, cbMsgMax, &cbMsgOut);
#ifdef LOGON
char msg[200];
sprintf(msg,"Error state:%s,error msg:%s",szSqlState,szErrorMsg);
BaseLog(id,msg,1);
#endif
rc = 4;
break;
case SQL_NO_DATA_FOUND:
rc = 5;
break;
default:
rc = 10;
break;
}
return rc;
}
BOOL Conn(int id)
{
if(id < 0 || id >= max)
return FALSE;
if(ConnArr[id].conned)
return TRUE;
RETCODE ret=SQLConnect(ConnArr[id].hdbc,(unsigned char *)base,SQL_NTS,(unsigned char *)user,SQL_NTS,(unsigned char *)pass,SQL_NTS);
if(ret != SQL_SUCCESS && ret !=SQL_SUCCESS_WITH_INFO)
{
#ifdef LOGON
BaseLog(id,"Cannot connect to odbc",1);
#endif
return FALSE;
}
ConnArr[id].conned = TRUE;
return TRUE;
}
BOOL ConnInit()
{
for(int i=0;i<max;i++)
{
if(Conn(i))
ConnArr[i].conned = TRUE;
else
ConnArr[i].conned = FALSE;
}
return TRUE;
}
int GetId()
{
if(WaitForSingleObject(hmutex,500) != WAIT_OBJECT_0)
return -1;
for(int i=0;i<50;i++)
{
for(int id=0;id<max;id++)
{
if(!ConnArr[id].usedf)
{
if(!ConnArr[id].conned && !Conn(id))
{
ReleaseMutex(hmutex);
return -1;
}
ConnArr[id].usedf = TRUE;
ReleaseMutex(hmutex);
return id;
}
}
_sleep(10);
}
ReleaseMutex(hmutex);
return -1;
}
BOOL ReleaseId(int id)
{
ConnArr[id].usedf = FALSE;
return TRUE;
}
BOOL BaseLog(int id,LPCTSTR msg,int lType)
{
FILE * hlog = NULL;
BOOL bDeleted = FALSE;
if(!strcmp(levl,"0"))
return TRUE;
if( (!strcmp(levl,"1")) && (lType >= 2))
return TRUE;
time_t mytime;
struct tm * nowtime;
time(&mytime );
nowtime = localtime(&mytime);
char szTime[50];
sprintf(szTime,"%02d%02d%02d %02d:%02d:%02d",nowtime->tm_year+1900,
nowtime->tm_mon+1,nowtime->tm_mday,
nowtime->tm_hour,nowtime->tm_min,nowtime->tm_sec);
if(WaitForSingleObject(fmutex,300) != WAIT_OBJECT_0)
return FALSE;
//删除前一日文件
if ((dele[0]=='Y')||(dele[0]=='y'))
if ((giLastLog != nowtime->tm_mday) && (giLastLog!=0))
{
DeleteFile(BASE_LOG);
bDeleted=TRUE;
}
giLastLog = nowtime->tm_mday;
if((hlog = fopen(BASE_LOG,"a+"))==NULL)
{
ReleaseMutex(fmutex);
return FALSE;
}
if (bDeleted)
fprintf(hlog,"Just deleted yesterday log file!\n");
if (id == COMM)
{
fprintf(hlog,"%s %s",szTime,msg);
fprintf(hlog,"\n");
}
else
{
fprintf(hlog,"%s ConnId%d:%s",szTime,id,msg);
fprintf(hlog,"\n");
}
fclose(hlog);
ReleaseMutex(fmutex);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -