Access中神秘的Criteria(上)

2023-05-16


  看到这个标题,很多读者可能会迷惑,什么是Criteria?我用了这么久Access,怎么从来没听说国。我猜想很多读者都是怀着好奇的心情点击的这个主题。但是也许你不知道,Access中,Criteria无处不在,无时无刻不在你的代码中出现,可能你每天都要和她打交道无数次,只是你从未真正了解过她。

  那么究竟什么才是Critetia,让我们来看下面这个例子:

Forms![窗体_1]![Text0]

  你可能会奇怪,这不是一个很标准的表达式吗?没错,这就是Criteria。我知道你现在心中一定在嘀咕,不就是表达式,有什么好神秘的。那么请你继续往下看,跟着我一起考虑几个或许你从未考虑过的问题。

  之所以我在文中不使用“表达式”来称呼她,是因为Criteria并不是标准的表达式,如果你使用过Eval函数,你就会知道,Eval处理的表达式才是标准的表达式,也正是因为如此,在VBA中文文档中,并没有把Criteria作中文翻译,而是使用了英文的原名。因为她是一种特殊的表达式。

  OK!既然我们已经认识了Criteria,我们一定可以回想起,我们在如此多的地方使用过她,在查询中,在窗体中,在报表中,……但是请你回忆一下,是不是每次都是你把Criteria告诉Access,然后她来帮你作处理,有没有你直接求出Criteria值然后自己来使用的?有?没有?有?没有?好好想想,到底有没有?  可能你开始觉得有点疑惑了,好像真的没有。不必以后,

  因为Access根本没有提供Criteria的求值接口!

  没错,Access完全隐藏了Criteria的求值过程,但是Access一定有个函数或者一个函数库来进行Criteria的求值。你可能会问我为什么这么肯定,理由很简单,Criteria包含的内容实在太多,可能是对象的数据,也可能是SQL查询的字段,可能是函数,还可能是……反正表达式生成器里面的那一堆东西,都可以包含在Criteria中,因此Criteria的求值过程并不是一个简单的过程,Access不可能为每个功能单独写段代码来对Criteria进行求值,所以她必定是一个模块,一个Access没有或者说不愿意公开接口的模块。唯一和Criteria有点关系的,可能就是Application对象的BuildCriteria方法了,但这只是一个Criteria生成(确切说是格式化)的方法,最终生成的Criteria,我们还是要通过各种不同的功能、函数传送给Access,以表达我们想要表达的内容,但是这个内容的最终结果是不是正确,我们无从得知,只能从功能和函数返回的值是否符合我们的预期来判断我们的Criteria是否传递正确了。

  这太不公平了!

  我们居然要隔着靴子挠痒痒!任何一个语言的开发环境都允许我们在调试模式下监视我们的值是否正确传递,但是Criteria,这个我们自己创建的东西,Access居然不允许我们直接查看她的结果。你不让,我偏要!

  经过一番尝试,我找到了一种Criteria求值方法。让我们创建一个窗体,添加三个名为Text1、Text2、Text3的文本控件,并且写入以下代码:

Private Sub Text2_AfterUpdate()
    Text3.ControlSource = "=" & Text2.Value
End Sub

  OK!让我们来执行这个窗体,并按照以下步骤输入:

1、Text1输入:我是Text1
2、Text2输入:[Text1]

  你看到了什么?呵呵,不用觉得惊讶,我们“的确”已经计算出了Criteria的值。你还可以尝试输入:Forms![窗体1].Name来看看窗体的名字。看来对象的解读没有问题,那么SQL字段呢?接着我们在这个窗体上绑定一个表,里面包含字段1,字段2,第一条记录是(123,120),然后再打开窗体,照以下步骤操作:

1、Text1输入:100
2、Text2输入:[字段1]*[字段2]/[Text1]

  哈哈,太好了,数据库字段解读一点问题都没有。最后再让我们尝试一下在VBA中获取到这个值。让我们首先把VBA代码中原先的代码删除,加入以下代码:

Private Sub Text2_AfterUpdate()
    Text3.Value = EvalCriteria(Text2.Value)
End Sub

Public Function EvalCriteria(ByVal strCriteria As String) As Variant
    Criteria.ControlSource = "=" & Text2.Value
    DoEvents
    EvalCriteria = Criteria.Value
End Function

  在这里,我们在窗体上放置了一个隐藏的文本控件名为Criteria,用于Criteria绑定数据源的中转,那么现在就让我们来运行这个窗体吧。

  运行的结果这里就不在赘述了,通过将Criteria当作一个数据源来绑定,我们成功地对Criteria进行了求值,终于踏出了揭开Criteria神秘面纱的第一步。(待续)



本文附带示范代码:


点击浏览该文件



下篇预告:

  通过一个文本框的数据源绑定中转,我们终于实现了Criteria的求值,在我们自以为已经揭开了Criteria神秘面纱的时候,我们突然发现,她居然还深深隐藏了不为人知的秘密!

  详情请见:Access中神秘的Criteria(下)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Access中神秘的Criteria(上) 的相关文章

  • CSMA/CD和CSMA/CA详解

    CSMA CD CSMA CD Carrier Sense Multiple Access Collision Detect 即载波监听多路访问 冲突检测方法 在以太网中 所有的节点共享传输介质 如何保证传输介质有序 高效地为许多节点提供传
  • pyodbc操作Access数据库

    现在各种各样的数据库层出不穷 什么MySQL PostgreSQL MongoDB这些都是比较火的 还有一些稍微小众一点的数据库就更多了 相比之下 微软Office套件里面附带的Access数据库究落寞了很多 不过好歹Access数据库还是
  • 内核虚拟化KVM/QEMU——guest os,qemu,kvm的运行流程

    内核虚拟化KVM QEMU guest os qemu kvm的运行流程 这里主要介绍基于x86平台的Guest Os Qemu Kvm工作流程 如图 通过KVM APIs可以将qemu的command传递到kvm 1 创建VM syste
  • Grails:在许多桌子上投影?

    我在 Grails 中的投影方面遇到一些问题 您能帮我检查一下并为我提出解决方案吗 我想查询许多具有多对一关系的表上的数据 并在它们的某些属性上进行投影 例如 class Person int id String name String a
  • Hibernate:获取太多行

    我在使用 Hibernate 从数据库获取行时遇到问题 当我只想获取一行时 我会收到 20 行 当我想从大约 1 5k 行的表中获取所有行时 我会收到 15 2k 行 该表的实体类具有复合主键 这是我获取所有行的代码 Criteria cr
  • 如何使用 OR 和汇总函数构建高级 Hibernate 查询

    我有一个在 SQL 中运行的相当复杂的查询 但为了可移植性 我想用 HQL 来表达它 我将获取用户配置的首选项值 如果存在 如果不存在 我必须使用默认值 必须从当前日期中减去该值 并将其与我感兴趣的表中的列进行匹配 select d id
  • Hibernate Criteria:区分实体然后限制

    我有一个返回应用程序所需的所有数据的标准 基本上 Criteria criteria session createCriteria Client class criteria createAlias address address crit
  • 获取数据表中满足特定条件的行数

    我有一个数据表 dtFoo 并且想要获取满足特定条件的行数 编辑 此数据未存储在数据库中 因此不能选择使用 SQL 过去 我使用了以下两种方法来实现此目的 Method 1 int numberOfRecords 0 DataRow row
  • 使用 Hibernate Criteria 和 Oracle 来处理时间的更好方法是什么?

    我想按时间选择实体 我的 Oracle DBMS 的字段类型为 DATE 其中包含日期和时间 这是我的代码 如何按时间标准选择数据 Calendar timeCal new GregorianCalendar 0 0 0 0 0 0 Dat
  • 使用“Is Null”作为基于表单的条件

    如果勾选了表单上的单选框 我试图让我的查询仅返回空记录 如果我在查询中手动包含条件为空 它就可以正常工作 而在其他地方则可以 IIf Forms Reports Status Active True Active 工作得很好 然而 IIf
  • 是否仍推荐使用旧版 Criteria API?

    我的团队在 Hibernate 3 x 下长期使用 hibernate Criteria API 最近 我们想将Hibernate版本升级到5 但是Criteria API似乎不再推荐了 但 JPA 看起来像是一个完全不同的 API 我们不
  • j2me数据库查询包括条件

    我正在使用 J2ME 创建一个应用程序 为了连接我正在使用的数据库唱片店 http docs oracle com javame config cldc ref impl midp2 0 jsr118 javax microedition
  • 从查询引用子表单

    在 MS Access 2010 中 我有一个查询 它在条件中引用了以下内容 Forms frm Add Item Subform ActiveControl Caption 这使我可以在查询中使用按钮的 标题 文本 以下代码位于 Butt
  • 使用 SINGLE_TABLE 继承策略运行条件时,“调用 getter of”时发生“IllegalArgumentException”

    我在尝试使用用简单限制装饰的休眠条件列出数据库中的对象时遇到此错误 Criteria criteria session createCriteria Licence class criteria add Restrictions eq gy
  • Hibernate Criteria - 如何将连接结果限制为单个实体类型?

    好的 下面的查询 SELECT O P FROM ORDERS O PRODUCT P WHERE O ORDER ID P ORDER ID AND P ID 1234 可以按如下标准完成 List ordersAndProducts s
  • hibernate查询语言还是使用条件?

    任何人告诉我使用 criteria hql sql 进行查询 要求是用户输入电子邮件或用户名 查询返回密码 来自表用户的用户 Criteria API 非常适合动态查询生成 并且是我的首选 你可以这样做 Criteria criteria
  • Criteria.DISTINCT_ROOT_ENTITY 不会阻止重复的对象

    我有以下 dao 方法 Override public List
  • 如何将带有子查询的 JPQL 转换为 Criteria API 等效项?

    有一个由 5 个实体组成的简单对象模型 Company 组织 Address Club Group 公司与单个组织相关联 团体和俱乐部也与单个组织相关联 它们是单向的 这意味着组织不包含对其所有者的引用 一个组织可以有 0 个或多个地址 子
  • Set 内元素的 Hibernate 标准

    我有一个实体 其中包含一组另一个实体 Entity1 包含集合EntityTwos 我想为entityTwos 中的 id 字段创建搜索条件 我搜索过 但没有得到任何答案 有人有主意吗 谢谢 斯里 很容易 就像是 criteria crea
  • NHibernate:将 ICriteria 转换为 DetachedCriteria

    任何人都知道如何将 ICriteria 转换为 DetachedCriteria 我需要使用现有的 ICriteria 作为子查询的一部分 使用 Add Subqueries PropertyIn Name myDetachedCriter

随机推荐

  • 关于java位运算符&,~,^,|,<<,>>的整理(包含二进制与十进制的转换)

    要讲java一些奇奇怪怪的运算符号之前 xff0c 必须先了解二进制 xff0c 因为这些看不懂的运算符都是基于二进制运算的 计算机里二进制的运算 xff0c 往往比十进制运算来的快 首先了解下转换规则 xff08 相互转换 xff09 x
  • 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    题目 xff1a 输入一行字符 xff0c 分别统计出其中英文字母 空格 数字和其它字符的个数 1 程序分析 xff1a 利用 while 语句 条件为输入的字符不为 39 n 39 2 程序源代码 xff1a include lt std
  • 使用Kolla-Ansible部署OpenStack环境部署

    部署环境 角色机器名IP 系统 计算节点 OpenStackControl ens3 172 28 191 99 ens4 192 168 1 156 CentOS8 3控制节点OpenStackCompute ens3 172 28 19
  • Vmware虚拟机汇总整理

    目录 一 vmware安装 xff1a 1 安装vmware软件 xff1a xff08 1 xff09 下载软件包 xff1a xff08 2 xff09 执行安装程序 xff1a 2 设置vmware默认安装路径 xff1a 3 设置v
  • VB中实现延时(等待)的几种方法

    在程序流程中经常要延时一段时间后再继续往下执行 在VB中常用的有以下几种方法 因为Timer控件打乱了程序的流程所以一般不用它 1 使用Windows API函数Sleep 新建一个工程 添加一个TextBox控件和一个CommandBut
  • Ubuntu上CUDNN下载及安装过程详细介绍

    前言 显卡驱动以及CUDA安装好后 xff08 https blog csdn net avideointerfaces article details 100558457 xff09 xff0c 就可以根据cuda的版本以及平台类型 xf
  • 苹果开发者账号续费不成功?提示你的支付授权失败?看这里...

    苹果开发者账号续费失败 xff0c 提示 xff1a 你的支付授权失败 请核对你的信息并重试 或尝试其他支付方式 请联系你的银行了 公司开发者账号即将到期 xff0c 一年一度续费的重任又落到我肩膀上了 xff0c 那么我们就进入正题吧 一
  • WPF 开发 —— 几何图形(PathGeometry)

    参考资料 xff1a WPF 2D绘图 3 PathGeometry WPF 2D绘图 2 Geometry WPF 2D绘图 1 Shape WPF Geometry Transformation Tool
  • C++ 求三个数的乘积

    编程实现输入任意三个整数a b c xff0c 将这三个数的乘积输出 xff1b Input 三个整数 xff0c 每个数字空格隔开 分别表示a b c三个变量的值 xff08 1 lt a lt 100 1 lt b lt 1000 1
  • 中文Cookie导致Session丢失的问题

    在网络上 xff0c 已经有无数的文章讨论Session丢失问题 xff0c 其中的原因有非常多的种类 xff0c 在此不再赘述 下面我们描述一种特殊的Session丢失现象 xff1a 1 在绝大多数客户端上 xff0c Session都
  • Access.Image Decoder

    版本 xff1a V0 41 系统要求 xff1a Access 2000及以上版本 软件介绍 xff1a Access中的Image控件将所有图形数据保存在PictureData属性数组中 xff0c 通过修改PictureData xf
  • 直接粘贴剪贴版的位图数据到Image控件

    调用范例 xff1a Private Sub Command1 Click PasteToImage Me Image0 End Sub 模块段代码 xff1a Option Compare Database Option Explicit
  • Access.Image BMP图像高速切割函数

    本函数可以在你自己的程序中调用 xff0c 从已有BMP中切割任意一个矩形块 使用本函数 xff0c 即使你对BMP格式一窍不通 xff0c 也可以在自己的程序中自由地切割BMP xff08 比方说拼图游戏程序 xff09 附件包含 xff
  • 优化Microsoft Access提高速度

    压缩 压缩 要保证经常性的压缩你的程序代码 当你在开发和使用Microsoft Access数据库时 xff0c 你要经常性地增加和删除数据 代码等等 现在的问题是Microsoft Access并不能有效地释放已分配的但被删除的对象空间
  • LINUX Shell 下求两个文件交集和差集的办法

    假设两个文件FILE1和FILE2用集合A和B表示 xff0c FILE1内容如下 xff1a a b c e d a FILE2内容如下 xff1a c d a c 基本上有两个方法 xff0c 一个是comm命令 xff0c 一个是gr
  • 安装ensp 图文详解(超详细)

    文章目录 ensp的详细安装步骤 xff1a 分享安装包 xff08 在下载ensp之前需要安装好该三个应用 xff09 Virtualbox下载地址 xff1a https www virtualbox org wireshark下载 h
  • Microsoft Access秘密、技巧和陷阱

    摘要 这篇文章概括了当使用Microsoft Access 时 xff0c 通过使用Access Basic可以增加应用程序的执行速度 xff0c 减少编码量 xff0c 同时也减少在为Microsoft Windows应用程序接口编程时
  • 浅析Windows编程的剪贴板机制

    摘要 xff1a 本文对Windows剪贴板机制作了深入 全面的阐述 xff0c 具体内容包括 xff1a 文本 位图 DSP 自定义格式剪贴板的使用和多数据项和延迟提交技术 关键词 xff1a VC 43 43 6 0 xff1b 剪贴板
  • Matthew Curland的VB函数指针调用

    Matthew Curland简介 xff1a Visual Studio开发小组成员 xff0c 参与开发了VB的IntelliSense和Object Browser 他是VB资深专家 xff0c 对VB有非常深入的研究 xff0c 堪
  • Access中神秘的Criteria(上)

    看到这个标题 xff0c 很多读者可能会迷惑 xff0c 什么是Criteria xff1f 我用了这么久Access xff0c 怎么从来没听说国 我猜想很多读者都是怀着好奇的心情点击的这个主题 但是也许你不知道 xff0c Access