为什么在运行SQL数据源远程视图的表单时经常出现“不能访问选定表”的出错提示?
我以SQL数据源远程视图,用VFP8.0开发了一个商品进销存软件,在运行该软件时,同时打开了较多SQL数据源远程视图,在运行表单命令时,对不同远程视图经营使用到“SET FILTER TO 筛选条件”与“SELECT - SQL 命令”,但在运行软件过程中经常出现“不能访问选定表”的出错提示,可明明该远程视图表处在数据工作期的某一区内,但却出现“不能访问选定表”的出错提示,分析不出原因。敬向电脑专家请教,是何原因,如何解决?不胜感激!
[解决办法]
应该是 ComboBox 的数据源被关闭了,或者发生了改变。
[解决办法]
我的意思你是不是用了 ComboBox 控件,这个控件的数据源被关闭了或发生了改变。
另外,你注意一下
“SET FILTER TO 筛选条件”或“locate for 位置条件”
请将 筛选条件 和 位置条件 中的变量改为全局变量或表单属性.
[解决办法]
不用 Locate For 取消。
还是那句话:请将 筛选条件 和 位置条件 中的变量改为全局变量或表单属性.
[解决办法]
“locate for 商品库存表.商品序号=商品购进表.商品序号”与“商品库存表.商品序号=商品销售表.商品序号”
这也没有变量呀,用的是字段名,不像是这个问题。
不过你也可以这样试试,将 商品购进表.商品序号 和 商品销售表.商品序号 改为全局变量试试。
如果好用了,说明 商品销售表、商品购进表 被关闭了。
[解决办法]
本帖最后由 apple_8180 于 2013-05-13 15:19:07 编辑 我以前碰到过这个错,原因是 ComboBox 控件的数据源表被关闭了。
以下转自 VFP9.0 汉化后的帮助文件:
不能访问被选定的表 (错误 1152)
试图在 32K 工作区范围之外选择一个表或试图引用没打开表中的文件变量。该错误可能在下列条件之下发生:
ComboBox 或 ListBox 控件 RowSource 属性指定的表或临时表被关闭。
如果想要关闭一个 ComboBox 或 ListBox 控件 RowSource 属性指定的表或临时表,在关闭该表或临时表之前完成任一下列动作:
设置 RowSource 属性为一个空值 ("")。
-或者-
释放该表单所包含的 ComboBox 或 ListBox 控件。
执行了一个重建 RowSource 属性指定的表或临时表的 SQL SELECT 指令,当该 SQL SELECT 指令运行时,Visual FoxPro 先关闭然后再打开该表。
为避免该错误,设置 RowSource 属性为一个空值(""),执行 SQL SELECT 指令,再重新设置 RowSource 属性为它早先的值。
应该是连接中断了,可能是这台电脑的系统设置问题,如:经过多长时间无人操作后,电脑自动休眠,激活后网络连接就断开了,所以出现你的问题。
解决方法:
1、设置系统不休眠或间隔时间延长,这个在 Windows 控制面板 -> 电源管理 中设置。
或
2、
Public gcConnectString,gnHandle
gcConnectString="DRIVER=SQL Server;SERVER=计算机名或IP地址;UID=用户名;PWD=密码;DATABASE=数据库名"
gnHandle=Sqlstringconnect(gcConnectString)
* 以上是程序启动时连接代码
* 然后每次操作前均检查一下连接是否中断了,可以把这部分写成自定义函数。
Local lnSqlState As Integer
Try
lnSqlState=SQLExec(gnHandle,'')
Catch
lnSqlState=-1
Endtry
If lnSqlState<1&& 如果无效则重新连接
SQLSetprop(0,"DispLogin" ,3)
gnHandle=Sqlstringconnect(gcConnectString)
If gnHandle<0&& 重新连接失败
Messagebox('服务器连接错误!'+Space(5),48,'信息提示')
Return
Endif
EndIf
* 可以把这部分写成自定义函数
* 连接正常或重新连接成功执行相应的 SQLExec(gnHandle,'相应的语句')