请问十豆三老师关于SQL远程视图连接数据源遇到的问题。
十豆三老师:
经常得到你的指导,非常感激您!
我上次向您提过一个问题,就是 运行SQL远程视图(通过资源管理器中的ODBC连接数据源)的软件中经常出现以下出错提示:
连接错误:[Microsoft][ODBC SQL Server Driver]通讯连接失败”
出现这个错误提示后,数据源不能连接(连接中断),软件处于死机状态,必须强行关机。
这个问题一直得不到解决。
您上次曾教我一个方法,每次对远程视图进行连接操作前,先检查一下与数据源的连接是否中断,如中断则重新执行连接数据源命令。为此,我编写了一个程序文件:
程序文件名:LJSQLSJK.prg
程序内容:
Local lnSqlState As Integer
Try
lnSqlState=SQLExec(gnHandle,'') 注:gnHandle是打开软件时取得的“连接句柄”
Catch
lnSqlState=-1
Endtry
If lnSqlState<1
SQLSetprop(0,"DispLogin" ,3)
gnHandle=Sqlstringconnect(“数据源连接字符串”)
If gnHandle<0
Messagebox('数据源连接中断,软件被迫退出!'+Space(5),48,'信息提示')
quit
Endif
EndIf
在运行软件中每次对远程视图进行连接操作前,先运行do LJSQLSJK 。
但现在发现一个问题:运行do LJSQLSJK后,仍出现“ 连接错误:[Microsoft][ODBC SQL Server Driver]通讯连接失败””的出错提示框。
按理,运行do LJSQLSJK后,如数据源连接中断,软件将被迫退出,但软件并没有退出,这说明数据源连接并没有中断,那又为什么仍出现“ODBC通讯连接失败””的出错提示框呢?
Sqlstringconnect(数据源连接字符串)命令取得连接句柄是对运行SQLExec(gnHandle, “SQL语句”)用SPT编程需要的,而我用的却是SQL远程视图,远程视图与SPT这二者之间有没有必然的联系。是否重新执行Sqlstringconnect(数据源连接字符串)命令重新取得连接句柄成功后,就可以确保SQL远程视图连接数据源成功?
敬请您指导,不胜感激!
[解决办法]
你的 LJSQLSJK.prg 只能检测 gnHandle 句柄的有效性,这个 gnHandle 必须是视图所有句柄才有意义。
如:
* LJSQLSJK.prg 改为
Lparameters tcViewName
lnViewConn=CursorGetProp("ConnectHandle",tcViewName)
Local lnSqlState As Integer
Try
lnSqlState=SQLExec(lnViewConn,'')
lnSqlState=0
Catch
lnSqlState=-1
Endtry
If lnSqlState<0
* SQLSetprop(0,"DispLogin" ,3)&& 此行代码如果在主程序开头已设置了,以后不用重复设置了。
* Use 视图名 In 0&& 此处重新打开视图
Endif
Use &tcViewName
或
Select (tcViewName)
Use
Use (tcViewName) In 0
[解决办法]
至于出现通讯连接失败的原因我说不准[因为我没有碰到过],之前我也给你提过可能的原因,可是你基本都排除了。