视图中的参数如何使用?

菩提998866 2008-12-03 05:50:40
想建立一个视图,使它有按要求过滤记录的功能,将来只须传递给它参数值就可以了,可是在建立视图时,只在菜单中发现一个视图参数的功能,设好参数后,没有发现如何调用这个参数,在筛选项中只有值一项,我该如何实现我的想法?
...全文
467 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
都市夜猫 2008-12-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zihua 的回复:]
如果在表单中使用带参数的视图时,是在表单的INIT中给视图的参数赋值吗?如何做?

楼上的朋友非常感谢你的指点,可我有点不明白,视图设计器菜单中的"视图参数"有何用?如何用?在筛选项目中如3楼所说只要在"?"后面带一个任意的字符串即可,那么菜单中的"视图参数"做何解释.
[/Quote]

1. 如果使用带参数的视图,肯定是因为查询参数经常需要变更,否则就没有意义了,不如直接用固定值来做过滤表达式。另外,是否可以在表单的 init 中给参数赋值,要看你是在什么地方加载的视图;如果是在数据环境中加载的,则没有作用,因为表单的数据环境是最先初始化的,表单的 load 和 init 事件都在其后,你需要将视图的参数所引用的变量作为一个 public 型才可以,否则在初始化数据环境时就会弹出参数表达式窗口要求你输入。当然你也可以将视图的 NoDataOnLoad 设为 .T., 或者将数据环境的 OpenView 设为 3 或者 AutoOpenTables 设为 .f. 来阻止视图被自动打开,以后在你认为合适的地方再定义好参数的变量并赋值,然后用代码来打开它。

2. 准确的说 ? 号后不是任意的字符串,是变量名,也就是说视图运行时用这个变量的值来替换 '?变量名' 的部分,参数化视图有两个好处,一是由 sql server 的预编译方式决定的,采用不同的参数运行同一查询,sql 只在第一次运行时编译和优化它,以后不用再编译,速度上有好处;第二是参数自动转换,特别是像日期型这样的参数,vfp 中随 set date 的设置不同,呈现的次序也不同,如果要作为值加到 sql 语句中,你需要转成 sql 可接受的格式,例如 '20080101' 或 '2008-1-1',然而如果使用一个参数变量,你不需要自己做这种变换,vfp 会自动帮你转成合适的格式。
至于菜单中的“视图参数”,说实话,我也不是很明白它的作用。帮助上说是一个逗号间隔的表达式,放入的是参数名和类型,用于 Where 表达式,至于如何使用它,它在 where 表达式中起什么作用,就没有详细的说明了。似乎是用来做参数类型自动转换的。我一直都只用 spt 方式来读写 sql 表,好处是每一步做什么自己心里有数,只要你熟悉 t-sql 的语法,不管多复杂的查询也没问题,方便灵活!调用存储过程也相同用 sqlexec,语法一致。而用视图则不然,你不知道它到底是如何工作的,就算在事件探查器中有时也无法看出它是如何取数据的。还有一点,vfp 的视图设计器好像有些 bug,至少在我的机器上是这样,有时命名更改的是第二个字段的 mapping 方式,可保存后再打开就变成第一个字段的映射变了;如果像你说的在菜单中加一个“视图参数”,就再也别想删除它,即使删除了,保存后再打开又像幽灵一样重现。好在我的程序只使用 spt,否则我也许早就疯掉了。好像有点长,慢慢看吧 ...

  • 打赏
  • 举报
回复
說白了就是一個篩選條件
在視圖里這樣寫
某某表的id = thisform.idno
在表單里添加上idno這個屬性
十豆三 2008-12-06
  • 打赏
  • 举报
回复
例如:

设计视图时,你添加了视图参数 ABC,是字符型,其实这个类型主要取决于你要用那个字段来筛选,那个字段的数据类型就是这个数据类型。
然后在设计视图中的筛选(Filter) 选项卡中创建筛选或选择现有的筛选,比如对一个字符型字段(FL1)进行筛选,选择这个字段,在 实例(Example) 框中,输入参数名(如:?ABCABC),然后保存视图为VIEW1。


测试1、如果在实例(Example) 框中,输入参数名是ABC
Open Data 视图所在数据库名
Use View1
&&这时会报错,提示找不到ABC列


测试2、如果在实例(Example) 框中,输入参数名是ABC
ABC="A123"
Open Data 视图所在数据库名
Use View1
Browse &&这时你会发现只有FL1="A123"的记录。这个视图参数起作用了。

测试3、如果在实例(Example) 框中,输入参数名是?ABC
Release ABC &&因为在测试2中定义ABC="A123",所以为了测试效果,所以先释放ABC
Open Data 视图所在数据库名
Use View1
&&这时会提示你输入参数值,例如你输入A123,然后BROWSE就只能看到FL1="A123"的记录,这就是用?号与不用?A的区别,


测试4、如果在实例(Example) 框中,输入参数名是?ABC
ABC="A123"
Open Data 视图所在数据库名
Use View1
Browse &&这时你会发现只有FL1="A123"的记录。这个视图参数起作用了。

总结:当打开视图前,给视图参数定义了值,那在设计视图的筛选(Filter) 选项卡的 实例(Example) 框中,输入参数名或参数名前加?的效果一样,但加了?号更好一些,即使忘记给视图
参数定义值,也不会报错,只需手工输入一下即可。
菩提998866 2008-12-05
  • 打赏
  • 举报
回复
如果在表单中使用带参数的视图时,是在表单的INIT中给视图的参数赋值吗?如何做?

楼上的朋友非常感谢你的指点,可我有点不明白,视图设计器菜单中的"视图参数"有何用?如何用?在筛选项目中如3楼所说只要在"?"后面带一个任意的字符串即可,那么菜单中的"视图参数"做何解释.
都市夜猫 2008-12-04
  • 打赏
  • 举报
回复
不用传递,只要打开/刷新视图时这个变量存在,就不会出现提示框,除非这个变量不存在,才会要求你指定它的值
ease456 2008-12-04
  • 打赏
  • 举报
回复
关注中,没有发现菜单中"视图参数"所建的参数有何用处,希望有用过的朋友给指点一下,在这里只说一下在筛选条件时用参数时只要在"值"栏目中输入以"?"开头的变量即可,如?id,在运行视图时就提示输入参数值了.
不过在表单中用视图时如何传递参数?学习中......
十豆三 2008-12-04
  • 打赏
  • 举报
回复
在视图设计器的“查看SQL”右键菜单中可以查看SQL代码,你可以改动这个代码。
也可以参考这个代码来代码建立视图。

请参考
http://topic.csdn.net/u/20081023/20/357912ac-3a16-42f9-8fd0-030c2a148ec0.html?seed=484906614
都市夜猫 2008-12-03
  • 打赏
  • 举报
回复
你这个参数化视图的过滤条件中一定有类似 id=?idval 这样的条件(可以在视图设计器的“查看SQL”右键菜单中找到),以后在运行中只要将变量 idval 的值改变,然后运行 REQUERY('视图名') 即可得到新的查询结果。

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧