设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: andymark
打印 上一主题 下一主题

[其它] [已解决]如何用变量代替in语句后面的内容

[复制链接]
11#
发表于 2006-6-10 09:08:00 | 只看该作者
由于我在网吧,没有办法进行测试,我明天上班会研究一下这个问题。

其实变通的办法是使用函数来返回一个变量的值,因为在条件格式中,函数是可用的。

以下为我以前在条件格式方面进行探讨写过的一些东西,有用或者没用,供你参考:http://www.office-cn.net/forum.php?mod=viewthread&tid=31509

http://www.office-cn.net/forum.php?mod=viewthread&tid=31637

http://www.office-cn.net/forum.php?mod=viewthread&tid=32417
12#
发表于 2006-6-10 09:15:00 | 只看该作者
以下是引用andymark在2006-6-9 21:14:00的发言:


  我想用变量代替IN语句的内容 ,为什么在子窗体可以这样调用变量 ,而在条件格式设置时又不行呢

    Me.Text4 = "'江苏','浙江'"
    strWhere = "[省份] in (" & Me.Text4 & ")"



试试看这样如何:

Me.Text4 = "'江苏','浙江'"

Public Function strWhere() As String
    strWhere = "[省份] in (" & Me.Text4 & ")"
End Function



13#
发表于 2006-6-10 17:22:00 | 只看该作者
这个问题牵涉到两个重要的概念:

1、条件表达式本身的合法性问题:

Fileter中所使用的,并不是Access本身的任何合法表达式,在Access文档中我们可以看到:

Filter 属性是一个[url=mkMSITStore:\Microsoft%20Office\OFFICE11\2052\vbaac10.chm::/html/acproFilter.htm#]字符串表达式[/url],它包含了一个不带 WHERE 关键字的 [url=mkMSITStore:\Microsoft%20Office\OFFICE11\2052\vbaac10.chm::/html/acproFilter.htm#]WHERE 子句[/url]。


这个字符串表达式是由SQL引擎来进行解释的。

而条件表达式与SQL完全无关,完全由Access来解读,必须要符合Access的语法。


在条件表达式中,这样是合法的:[省份] In ('江苏','浙江')

但是这里'江苏'和'浙江'是两个参数,而非一个带逗号的参数。



2、Criteria的监视机制。

Access中大量对于Criteria变化的响应,都是通过一套监视机制来实现的(详情可参考我专栏中的文章《Access中神秘的Criteria》),但是这个响应机制就我目前理解而言,是只能监视本窗体的,对于其他窗体无法进行主动式的响应。因此在主窗体的数据变更,不会引起子窗体中Criteria的重新计算。如果一定要这样做,必须绑定到本窗体一个不可见的控件,然后当主窗体发生变更时,主动对子窗体的数据进行刷新,而同一窗体内的Criteria,则受到Access监控机制的监控。



[此贴子已经被作者于2006-6-10 9:48:59编辑过]

14#
 楼主| 发表于 2006-6-10 18:06:00 | 只看该作者
谢谢LucasLynn总版主解释两者之间的区别,你的大作我会认真拜读
15#
发表于 2006-6-10 18:55:00 | 只看该作者
以下是引用andymark在2006-6-10 10:06:00的发言:
谢谢LucasLynn总版主解释两者之间的区别,你的大作我会认真拜读



谈不上是什么大作,只是我自己在研究条件格式过程中的一些笔记而已,希望能帮助你少走一些我当时走过的弯路(因为关于条件格式的内部机制,官方文档的描述是非常少的)

这个问题我们可以继续讨论,看看能否找到一个好的解决途径。



16#
 楼主| 发表于 2006-6-10 22:27:00 | 只看该作者
   

用代码设置条件格式,问题解决:

  Dim objFrc As FormatCondition
  Dim StrWhere
   Dim lngRed As Long
   Dim lngWhite As Long
   Dim lngBlack As Long
   Dim lngYellow As Long

   ' 设置背景色和前景色
   lngRed = RGB(255, 0, 0)
   lngWhite = RGB(255, 255, 255)
   lngBlack = RGB(0, 0, 0)
   lngYellow = RGB(255, 255, 0)
  
  StrWhere = "'江苏','浙江'"
  
  Me.省份.FormatConditions.Delete

   Set objFrc = Me.省份.FormatConditions. _
                      Add(acExpression, , "[省份] in( " & StrWhere & ")")


   With Me.省份.FormatConditions(0)
        .BackColor = lngYellow
        .FontBold = True
        .ForeColor = lngBlack
   End With
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-22 11:30 , Processed in 0.105501 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表