首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

请教十豆三老师关于SQL远程视图连接数据源遇到的有关问题

2013-07-09 
请问十豆三老师关于SQL远程视图连接数据源遇到的问题。十豆三老师:经常得到你的指导,非常感激您!我上次向您

请问十豆三老师关于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

检测时:Do LJSQLSJK With '视图名'
[解决办法]
如果视图与数据源断开,那被打开的视图也没有意义了,所以我上面又重新打开了视图,目的是重新取得连接。
需你测试一下

select &tcViewName   


   Use &tcViewName



Select (tcViewName)   
Use
Use (tcViewName) In 0
[解决办法]
至于出现通讯连接失败的原因我说不准[因为我没有碰到过],之前我也给你提过可能的原因,可是你基本都排除了。

热点排行