关于检核数据库连接句柄的问题
Conn = SQLStringConnect( "DRIVER={SQL Server};SERVER=192.168.100.12;UID=sa;PWD=;DATABASE=Test ")
If SQLExec(Conn, "Select * From TableName1 ", "Tmp ") <=0
MessageBox( "Wrong! ")
EndIf
Select Tmp
Browse
Use In Tmp
此时我将192.168.100.12上的SQL服务停止。
If SQLExec(Conn, "Select * From TableName2 ", "Tmp ") <=0
MessageBox( "Wrong! ")
EndIf
执行第二句SQL时会失败,因为这时Conn连接句柄失效了。但是我看Conn的数值还是正数。
请问:像这种连接句柄失效时,我怎么检查数据库的连接状态啊?
[解决办法]
参考ON ERROR:
ON ERROR DO errHandler WITH ;
ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )
USE nodatabase
ON ERROR && Restores system error handler.
PROCEDURE errHandler
PARAMETER merror, mess, mess1, mprog, mlineno
CLEAR
? 'Error number: ' + LTRIM(STR(merror))
? 'Error message: ' + mess
? 'Line of code with error: ' + mess1
? 'Line number of error: ' + LTRIM(STR(mlineno))
? 'Program with error: ' + mprog
ENDPROC
[解决办法]
将以下代码保存为一个Prg文件,如:MyFunction.prg
*====================================================
*作 用:写ODBC错误到日志ErrorLog.txt,并显示错误信息
*语 法:MyWriteShowOdbcErr(c另外要显示错误信息)
*参数说明:可为空,如 ' '
*返 回 值:无,直接写入日志文件并显示了错误信息
*====================================================
FUNCTION MyWriteShowOdbcErr
PARAMETERS tcWarnInfo
SET TEXTMERGE DELIMITERS TO
SET TEXTMERGE ON
SET TEXTMERGE TO ErrorLog.txt ADDITIVE NOSHOW
\-----------------------------------------------
\ < <DATETIME()> > ODBC 错误记录
nErrLine=AERROR(laErr)
FOR N=1 TO nErrLine
\错误编号: < <laErr(N,1)> >
\错误信息: < <laErr(N,2)> >
\ODBC 信息: < <laErr(N,3)> >
\ODBC SQL 状态: < <laErr(N,4)> >
\ODBC 数据源错误编号: < <laErr(N,5)> >
\ODBC 连接句柄: < <laErr(N,6)> >
\
\-----------------------------------------------
ENDFOR
SET TEXTMERGE TO
IF AERROR(laError)> 0
=MESSAGEBOX(CHR(10)+laError[2]+SPACE(5)+CHR(10)+CHR(10)+tcWarnInfo,0+16, '错误: '+TRANSFORM(laError[1]))
ELSE
MESSAGEBOX(tcWarnInfo,16, '错误 ')
ENDIF
ENDFUNC
*---------------
然后在主程序中加代码:
SET PROCEDURE TO MyFunction.PRG
*----------------
最后你的代码
MessageBox( "Wrong! ")
改为
MyWriteShowOdbcErr( " ")