标题:关于 grid setall 表达式问题,请大家指教。弄了一天了还是报错。
只看楼主
lwyya
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-12
结帖率:0
已结贴  问题点数:20 回复次数:8 
关于 grid setall 表达式问题,请大家指教。弄了一天了还是报错。
&&&& 在表单的init事件中 绑定临时表到 grid1   表中包含字段by_id  (整型)   目前表中有2条数据,by_id=1;by_id=2
cksql1="select * from byjcxx  into cursor tmpmain_byjcxx"
thisform.container1.grid1.columncount=7
thisform.container1.grid1.recordsource=null
thisform.container1.grid1.recordsourcetype=4  &&sql语句模式
thisform.container1.grid1.recordsource="&cksql1"
thisform.container1.grid1.refresh
thisform.refresh

&&&&从另一个表中查询满足指定条件的字段bl_id值(整型)    此表的bl_id字段与上表的by_id值代表的信息一致。  

&&&& 此处满足条件的bl_id的值=1,所以tmp_qf=1   (已测试返回值正常)

select bl_id from blgl where bl_ssws>0 into array tmp_qf   

select tmpmain_byjcxx   

&& ascan(tmp_qf,tmpmain_byjcxx.by_id) 返回值为1,所以表达式返回正常。

&&& 错误点:   设置grid的颜色。  此处一直报  dynamicbackcolor 属性的表达式无效。

thisform.container1.grid1.setall("dynamicbackcolor","iif(ascan(tmp_qf,tmpmain_byjcxx.by_id)>0,rgb(255,25,20),rgb(255,255,0))","column")

经测试:
thisform.container1.grid1.setall("dynamicbackcolor","iif(1>0,rgb(255,25,20),rgb(255,255,0))","column")
grid能正常匹配。

可以确定是因为ascan(tmp_qf,tmpmain_byjcxx.by_id)>0  这个表达式引起的。
疑问:  这个表达式也是返回一个逻辑值,为啥一直会报 表达式无效呢?
求各位朋友指点!
搜索更多相关主题的帖子: 表达式 cursor 
2012-12-26 22:48
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
得分:4 

ascan( ) 函数少了参数吧?
参见帮助文件中:
例如, 下面示例只搜索第二列的第三和第四个元素 (而不是整个数组)。
? ASCAN(abc,"M",3,2,2)

相互学习,互相交流,共同提高。
2012-12-26 23:11
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
得分:4 
程序代码:
ascan( ) 函数
在数组中搜索与一个表达式具有相同数据和数据类型的元素。
语法
ASCAN(ArrayName, eExpression [, nStartElement [,nElementsSearched]])
参数
ArrayName 指定要在其中进行搜索的数组。
eExpression 指定要搜索的常规表达式。
nStartElement 指定开始搜索的元素号(含此元素)。如果忽略参数 nStartElement,则默认搜索整个数组。
nElementsSearched 指定要搜索的元素数目。如果忽略参数 nStartElement 和 nElementSearched,将从第一个元素开始搜索到最后一个元素。

附注
有两种方式可以引用二维内存变量数组中的某个元素。第一种方法为引用确定元素在数组的第几行和第几列的两个下标值,另一种方法为使用元素编号。此函数和其他操作二维数组的函数需要元素的编号值 ( nStartElement 和 nElementsSearched )。使用 AELEMENT( ) 函数可将二维数组中元素的行列下标值转换成编号。

返回值类型 数值型

说明
如果找到了匹配元素,ASCAN( )函数将返回找到的元素编号。如果没有找到匹配元素,ASCAN( ) 的返回值为零。
字符数据成功匹配的条件由 SET EXACT 命令决定。如果 SET EXACT 为 ON,数组元素与查找表达式必须逐字符匹配并且长度相等;如果 SET EXACT 为 OFF,只要元素与到表达式末尾为止的字符相匹配,匹配即成功。有关字符串匹配条件的详细内容,请参阅 SET EXACT 主题中的“字符串比较表”。
认真看一下该函数的正确用法。
2012-12-26 23:23
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
得分:0 
thisform.container1.grid1.setall("dynamicbackcolor","iif(1>0,rgb(255,25,20),rgb(255,255,0))","column")
红字处条件错误。
2012-12-27 02:19
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:4 
有时候是挺奇怪的,单独用是正确的,但套到公式里去就会发生错误,可能是受到公式的某些我们不知道的限制。既然整个套要出错,你就多写一句:把ASCAN()函数的结果先赋值给一个变量,然后把你的红字部分改为“变量名>0”即可。
2012-12-27 08:47
Kerberos
Rank: 5Rank: 5
来 自:江苏扬州
等 级:职业侠客
帖 子:227
专家分:355
注 册:2012-9-11
得分:4 
这个问题我也遇到过,后来发现跟背景颜色无关

想学好VFP,想做VFP高手,想帮助更多的人解决VFP问题!
2012-12-27 09:14
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:4 
回复 6楼 Kerberos
你是怎么解决的
2012-12-27 09:17
lwyya
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-12
得分:0 
以下是引用taifu945在2012-12-27 08:47:29的发言:

有时候是挺奇怪的,单独用是正确的,但套到公式里去就会发生错误,可能是受到公式的某些我们不知道的限制。既然整个套要出错,你就多写一句:把ASCAN()函数的结果先赋值给一个变量,然后把你的红字部分改为“变量名>0”即可。



今天网络一直不通,没能上来查看老师们的回复。


感谢  taifu945  老师的提醒, 我将  表达式  赋值到变量后, 使用 变量>0 还是报同样错误。

突然想到是不是  变量作用域的原因。  public 变量后,   显示正常。

再public array tmp_qf[n]  后,重新使用ascan(tmp_qf,tmpmain_byjcxx.by_id)>0作为  表达式 ,grid正常显示。



至此,结贴。  感谢关注、回复该帖子的老师们!
2012-12-27 16:50
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:0 
对的,内存变量的作用域在表单使用中最容易出现问题,我在自己写的书中也一再强调要注意内存变量的作用域。
2012-12-27 17:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-393835-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.140280 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved