【问题标题】:Variable not found未找到变量
【发布时间】:2016-06-21 09:11:15
【问题描述】:

我在由视图填充的表单上有一个网格。我添加了一个按钮来过滤数据。

cFilter = UPPER(ALLTRIM(INPUTBOX("Filter sur :","Spectech France - Suivi DDP")))

SELECT vwDdp_all

LOCATE FOR ALLTRIM(ref_client) = cFilter
IF FOUND()
    SET FILTER TO ref_client = cFilter 
    THISFORM.grdDDP.Column10.SetFocus
ENDIF

我收到“未找到变量 cFilter”错误。我不明白的是,错误是在上面的代码已经运行之后出现的;在调试器中,有罪的方法被指示为“MyForm.grdDDP”。没有其他的。我怎样才能找到它实际在哪里寻找这个变量?

【问题讨论】:

  • 使用错误处理程序显示错误发生在MyForm.grdDDP.Error(??)

标签: visual-foxpro


【解决方案1】:

变量 cFilter 必须是全局变量才能使您的代码正常工作。

如果你不想使用全局变量,你可以这样做。

cFilter = UPPER(ALLTRIM(INPUTBOX("Filter sur :","Spectech France - Suivi DDP")))

SELECT vwDdp_all

LOCATE FOR ALLTRIM(ref_client) = cFilter
IF FOUND()
   lcFiltClause = [ref_client = ']+cFilter+[']
   SET FILTER TO &lcFiltClause
   THISFORM.grdDDP.Column10.SetFocus
ENDIF

【讨论】:

    【解决方案2】:

    在绑定光标中导航时,过滤器表达式必须始终可见。你可以这样做:

    Local lcFilter
    lcFilter = Textmerge('ref_client = "<< m.cFilter >>"')
    Set Filter To &lcFilter
    

    但是,set filter 是几乎所有开发人员都将其列在“不使用”列表中的命令之一。特别是对于网格,您不应该使用“设置过滤器”。相反,您可以简单地使用查询作为网格的源。或者,如果该 ref_client 是一个索引字段,那么您可以改用“设置范围”(它不需要全局变量或任何 & 技巧)。

    【讨论】:

    • 过滤器是用户要求(他们想模仿应用程序应该替换的巨大 Excel 工作表),但我会听取您的建议并尝试使用“设置范围”。
    • 是的,设置过滤器不适用于网格(注意误导性的滚动条)。
    • 顺便说一句,您可能想要使用(现在免费并公开发布)Foxyclasses 网格,尤其是 LocatorGrid 类。
    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 2021-11-05
    • 2020-03-07
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多