注册 登录
编程论坛 VFP论坛

columns不是一个对象,这个问题怎么解决

hytizj023 发布于 2023-03-27 15:27, 1404 次点击
表单里面有两个表格控件,grid1和grid2
表单里面有个查询按钮
代码如下:
程序代码:

if empty(thisform.pageframe1.page1.pageframe1.page1.text1.Value)
MESSAGEBOX("要查询的数据不能为空,请填写数据后在查询",16,"系统提示")
thisform.pageframe1.page1.pageframe1.page1.text1.SetFocus
ELSE
a=ALLTRIM(thisform.pageframe1.page1.pageframe1.page1.text1.Value)
b=thisform.pageframe1.page1.pageframe1. CASE
CASE b="历史同期"
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
SELECT * from 本地数据 WHERE 期号 like "%"+a INTO CURSOR 历史
SELECT 历史
c=RECCOUNT()
IF c<1
USE
MESSAGEBOX("数据库中不存在您要查找的数据!",16,"系统提示")
thisform.pageframe1.page1.pageframe1.page1.text1.Value=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='本地数据'
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ELSE
COUNT FOR='' to n1
COUNT FOR='' to n2
COUNT FOR='' to n3
COUNT FOR='' to n4
COUNT FOR='' to n5
COUNT FOR='' to n6
COUNT FOR='' to n7
COUNT FOR='' to n8
COUNT FOR='' to n9
COUNT FOR='' to n10

chuxiancishu="出现次数"
sqlexec(nHandle,"update 历史同期统计 set=?n1 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n2 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n3 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n4 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n5 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n6 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n7 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n8 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n9 where 常规=?chuxiancishu")
sqlexec(nHandle,"update 历史同期统计 set=?n10 where 常规=?chuxiancishu")

sqlexec(nHandle,"select * from 历史同期统计","历史同期统计")
thisform.pageframe1.page1.pageframe1.page1.grid2.Init
thisform.pageframe1.page1.pageframe1.page1.grid2.RecordSource='历史同期统计'
thisform.pageframe1.page1.pageframe1.page1.grid2.Visible= .T.
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='历史'
SELECT 历史
GO TOP
thisform.pageframe1.page1.pageframe1.page1.grid1.Init
thisform.pageframe1.page1.pageframe1.page1.Init
thisform.pageframe1.page1.pageframe1.page1.grid1.Refresh
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ENDIF

CASE b="期号"
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
SELECT * from 本地数据 WHERE 期号 like a INTO CURSOR 期号
SELECT 期号
c=RECCOUNT()
IF c<1
USE
MESSAGEBOX("数据库中不存在您要查找的数据!",16,"系统提示")
thisform.pageframe1.page1.pageframe1.page1.text1.Value=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='本地数据'
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ELSE
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='期号'
thisform.pageframe1.page1.pageframe1.page1.grid1.Init
thisform.pageframe1.page1.pageframe1.page1.Init
thisform.pageframe1.page1.pageframe1.page1.grid1.Refresh
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ENDIF

CASE b="试机号"
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
SELECT * from 本地数据 WHERE 试机号 like a INTO CURSOR 试机号
SELECT 试机号
c=RECCOUNT()
IF c<1
USE
MESSAGEBOX("数据库中不存在您要查找的数据",16,"系统提示")
thisform.pageframe1.page1.pageframe1.page1.text1.Value=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='本地数据'
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ELSE
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='试机号'
thisform.pageframe1.page1.pageframe1.page1.grid1.Init
thisform.pageframe1.page1.pageframe1.page1.Init
thisform.pageframe1.page1.pageframe1.page1.grid1.Refresh
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ENDIF

CASE b="开奖号"
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
SELECT * from 本地数据 WHERE 开奖号 like a INTO CURSOR 开奖号
SELECT 开奖号
c=RECCOUNT()
IF c<1
USE
MESSAGEBOX("数据库中不存在您要查找的数据",16,"系统提示")
thisform.pageframe1.page1.pageframe1.page1.text1.Value=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource=''
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='本地数据'
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ELSE
thisform.pageframe1.page1.pageframe1.page1.grid1.RecordSource='开奖号'
thisform.pageframe1.page1.pageframe1.page1.grid1.Init
thisform.pageframe1.page1.pageframe1.page1.Init
thisform.pageframe1.page1.pageframe1.page1.grid1.Refresh
thisform.pageframe1.page1.pageframe1.page1.grid1.SetFocus
ENDIF
ENDCASE
ENDIF

下面是grid1和grid2的init代码
程序代码:

this.setall("alignment",2,"column")&&内容居中
this.setall("alignment",2,"header")&&表头居中
this.setall("resizable",.f.,"column")&&禁止调整宽度
this.setall("movable",.f.,"column")&&禁止调整列前后
this.rowheight=28
this.Columns(1).backcolor=RGB(247,247,247)
this.Columns(1).width=290
this.Columns(2).width=30
this.Columns(3).width=30
this.Columns(4).width=30
this.Columns(5).width=30
this.Columns(6).width=30
this.Columns(7).width=30
this.Columns(8).width=30
this.Columns(9).width=30
this.Columns(10).width=30
this.Columns(11).width=30
this.Columns(12).width=30
this.Columns(13).width=30
this.Columns(14).width=30
this.Columns(15).width=30
this.Columns(16).width=30
this.Columns(17).width=30
this.Columns(18).width=30
this.Columns(19).width=30
this.Columns(20).width=30
this.Columns(21).width=30
this.Columns(22).width=30
this.Columns(23).width=30
this.Columns(24).width=30
this.Columns(25).width=30

问题:第一次查询,是正常的,当第二查询就报错columns不是一个对象,请教各位这个怎么解决!
就是当连续查询的时候会报错,grid2报错,grid1不报错!头痛了
13 回复
#2
sdta2023-03-27 16:13
thisform.pageframe1.page1.pageframe1.page1.
这是页框套页框吗
#3
sdta2023-03-27 16:22
第一遍执行没有问题,说明代码没有问题,也可能是其它地方的问题引起的吧。
thisform.pageframe1.page1.pageframe1.page1.grid2.Visible= .T.
说明别处有 thisform.pageframe1.page1.pageframe1.page1.grid2.Visible= .F.

*********************************
RecordSource='历史同期统计'
RecordSource='历史'
这两个数据源的列数是否不同

[此贴子已经被作者于2023-3-27 16:25编辑过]

#4
吹水佬2023-03-27 16:44
columns是数组,应该是下标i的问题。
可能是表格数据源变动引起columns变动。
所以,数据源变动时column最好也要主动相应地变动。
#5
hytizj0232023-03-27 17:16
以下是引用sdta在2023-3-27 16:13:53的发言:

thisform.pageframe1.page1.pageframe1.page1.
这是页框套页框吗

对,东西很多,必须要这么套
#6
hytizj0232023-03-27 17:20
以下是引用sdta在2023-3-27 16:22:13的发言:

第一遍执行没有问题,说明代码没有问题,也可能是其它地方的问题引起的吧。
thisform.pageframe1.page1.pageframe1.page1.grid2.Visible= .T.
说明别处有 thisform.pageframe1.page1.pageframe1.page1.grid2.Visible= .F.

*********************************
RecordSource='历史同期统计'
RecordSource='历史'
这两个数据源的列数是否不同

两个不同的数据源,列数也不相同,但是grid里面就只写了一些调整表格的代码,这个和程序执行代码没关系啊!
我把grid的visible初始化设置成了.f.
所以要
thisform.pageframe1.page1.pageframe1.page1.grid2.Visible= .T.
我纳闷了,找不到问题在哪里了
#7
吹水佬2023-03-27 17:29
以下是引用hytizj023在2023-3-27 17:20:51的发言:

两个不同的数据源,列数也不相同,

两个不同的数据源,列数也不相同。说明columns的i也不都相同,有可能i会超出范围(columns对象无效)
#8
hytizj0232023-03-27 17:39
以下是引用吹水佬在2023-3-27 17:29:45的发言:


两个不同的数据源,列数也不相同。说明columns的i也不都相同,有可能i会超出范围(columns对象无效)

报columns(1)对象无效,第一个就报
#9
sdta2023-03-27 17:39
作为新手:
第一步先使程序能正常应用(代码多些不怕)。
第二步当实力达到一定高度再考虑优化代码。
#10
sdta2023-03-27 17:42
以下是引用hytizj023在2023-3-27 17:20:51的发言:


两个不同的数据源,列数也不相同,但是grid里面就只写了一些调整表格的代码,这个和程序执行代码没关系啊!
我把grid的visible初始化设置成了.f.
所以要
thisform.pageframe1.page1.pageframe1.page1.grid2.Visible= .T.
我纳闷了,找不到问题在哪里了

问题应该在
RecordSource='历史同期统计'
RecordSource='历史'
列数不同造成的
#11
sdta2023-03-27 17:44
this.setall("alignment",2,"column")&&内容居中
this.setall("alignment",2,"header")&&表头居中
this.setall("resizable",.f.,"column")&&禁止调整宽度
this.setall("movable",.f.,"column")&&禁止调整列前后
this.rowheight=28
this.Columns(1).backcolor=RGB(247,247,247)
this.Columns(1).width=290
this.Columns(2).width=30
this.Columns(3).width=30
this.Columns(4).width=30
this.Columns(5).width=30
this.Columns(6).width=30
this.Columns(7).width=30
this.Columns(8).width=30
this.Columns(9).width=30
this.Columns(10).width=30
this.Columns(11).width=30
this.Columns(12).width=30
this.Columns(13).width=30
this.Columns(14).width=30
this.Columns(15).width=30
this.Columns(16).width=30
this.Columns(17).width=30
this.Columns(18).width=30
this.Columns(19).width=30
this.Columns(20).width=30
this.Columns(21).width=30
this.Columns(22).width=30
this.Columns(23).width=30
this.Columns(24).width=30
this.Columns(25).width=30

有多少列就写多少列,不存在列的代码删除。
#12
吹水佬2023-03-27 18:01
以下是引用hytizj023在2023-3-27 17:39:21的发言:
报columns(1)对象无效,第一个就报

可以先看看ColumnCount是什么,这个就是Columns的元素数目。
#13
hytizj0232023-03-27 18:34
以下是引用sdta在2023-3-27 17:42:48的发言:


问题应该在
RecordSource='历史同期统计'
RecordSource='历史'
列数不同造成的

我终于弄清楚,是怎么回事了,上代码
thisform.pageframe1.page1.pageframe1.page1.grid2.setall("alignment",2,"column")&&内容居中
thisform.pageframe1.page1.pageframe1.page1.grid2.setall("alignment",2,"header")&&表头居中
thisform.pageframe1.page1.pageframe1.page1.grid2.setall("resizable",.f.,"column")&&禁止调整宽度
thisform.pageframe1.page1.pageframe1.page1.grid2.setall("movable",.f.,"column")&&禁止调整列前后
thisform.pageframe1.page1.pageframe1.page1.grid2.rowheight=28
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(1).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(2).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(3).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(4).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(5).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(6).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(7).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(8).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(9).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(10).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(11).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(12).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(13).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(14).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(15).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(16).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(17).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(18).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(19).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(20).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(21).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(22).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(23).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(24).backcolor=RGB(247,247,247)
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(25).backcolor=RGB(247,247,247)


thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(1).width=290
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(2).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(3).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(4).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(5).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(6).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(7).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(8).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(9).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(10).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(11).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(12).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(13).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(14).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(15).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(16).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(17).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(18).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(19).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(20).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(21).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(22).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(23).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(24).width=30
thisform.pageframe1.page1.pageframe1.page1.grid2.Columns(25).width=30
我把这段代码放在了查询按钮里面,就没有问题了,可能是,表格不存在,还没有生成表格前,表格的init里面当然不存在,columns,所以会报错!
#14
zhken2023-03-27 22:01
简化一下代码吧,增强可读性,看得眼花
1