设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4036|回复: 15
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2006-6-10 05:14:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  我想用变量代替IN语句的内容 ,为什么在子窗体可以这样调用变量 ,而在条件格式设置时又不行呢

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


[此贴子已经被作者于2006-6-10 14:27:34编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
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
15#
发表于 2006-6-10 18:55:00 | 只看该作者
以下是引用andymark在2006-6-10 10:06:00的发言:
谢谢LucasLynn总版主解释两者之间的区别,你的大作我会认真拜读



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

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



14#
 楼主| 发表于 2006-6-10 18:06:00 | 只看该作者
谢谢LucasLynn总版主解释两者之间的区别,你的大作我会认真拜读
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编辑过]

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



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
10#
发表于 2006-6-10 08:18:00 | 只看该作者
以下是引用andymark在2006-6-9 22:55:00的发言:






    谢谢你。我的最终目的是通过变量来改变条件格式,如文本的值是江苏、浙江时,省份的颜色就改变,在4楼的例子中,你试试看


  

试了,用变量的方法不行.
9#
 楼主| 发表于 2006-6-10 07:32:00 | 只看该作者
以下是引用zxzx2733在2006-6-9 22:45:00的发言:


fan0217的方法可用,你的例子不是做好了

用三个组合框....为条件格式用



     我只想用一个条件,格式N条记录,记录值是不定的,只能用变量
8#
 楼主| 发表于 2006-6-10 06:55:00 | 只看该作者
以下是引用qlm在2006-6-9 22:40:00的发言:


这样就可以,不过用的SQL有点不同

在文本框填入  江苏,淅江

然后:

Private Sub Text4_DblClick(Cancel As Integer)
Dim strWhere As String
Dim sss As String

sss = Replace(Text4, ",", " 'or 省份='")
strWhere = "省份='" & sss & "'"
Me.sub.Form.Filter = strWhere
Me.sub.Form.FilterOn = True

End Sub



    谢谢你。我的最终目的是通过变量来改变条件格式,如文本的值是江苏、浙江时,省份的颜色就改变,在4楼的例子中,你试试看

  

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-22 11:27 , Processed in 0.105121 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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