请教一个关于“无法访问选定表”的问题
现象描述:
在表单中有两个表格Grid1、Grid2,其数据源分别是表T、临时表myT。通过一文本框对表格Grid1进行赋值,当焦点离开文本框时,对表T进行合计运算,结果赋给表myT。
在不进行合计运算、给表myT赋值时,文本框的LostFocus主要代码如下:
Select T
Replace 贷方 With 0&& 赋值
Select T
Go Bottom
If 借方 # 0Or 贷方 # 0
Append Blank
Endif
Thisform.grid1.column1.n1.SetFocus
在此代码下运行时,当焦点到达表格的另一单元格时,可以通过其中的下拉框控件正常进行查询(查询中用到了一个临时表TMP)。
问题:
但是当我把给表Grid2合计赋值代码加进来后,运行完这段代码进行到表格第二行进行查询时,就会出现“无法访问选定表。TMP”的提示,下拉框无法显示,但是通过命令查表TMP,都还存在。
然后中断程序,再次运行时,却一切又可以正常查询了。就是说,这段代码只在第一次打开VFP运行时会出现“无法访问选定表。TMP”的问题。
是什么原因呢?请大侠帮助分析指点!
改变后的代码:
Select T
Replace 贷方 With 0
**-- 进行合计计算
This.Parent.grid2.RecordSource=""
Do sumPZ && 求和的一个过程
This.Parent.grid2.RecordSource="myT"
Select T
Go Bottom
If 借方 # 0Or 贷方 # 0
Append Blank
Endif
Thisform.grid1.column1.n1.SetFocus
Procedure sumPZ
***--- 数值合计处理:
Select T
Sum(借方) To sum借方
Sum(贷方) To sum贷方
v_str=Alltrim(Str(sum借方,12,2))&& 12位字符串值,取两位小数。
v_str贷=Alltrim(Str(sum贷方,12,2))
***--- 生成临时表myT,做为合计表Grid2的数据源:
Create Cursor myT (no c(1), 借亿 c(1), 借千 c(1), ......贷分 c(1) )
Append Blank
Replace 借分 With Right(v_str,1),借角 With Substr(v_str,(Len(v_str)-1),1),......贷亿 With Substr(v_str贷,(Len(v_str贷)-11),1)
Return
[解决办法]
应该是你的下拉框的数据源表被关闭,或关闭后又打开了,或被重新生成了。
如果是这样,对下拉框的数据源表做以上操作时,先将 下拉框 的数据源清空,然后操作后,再设置上。
[解决办法]
把临时表MYT,改为DBF表,直接加入数据环境中,试下
或者在Procedure sumPZ的过程中,在CREATE CURSOR 前,先保存SELECT T 工作区
调用结束后,恢复SELECT T 工作区