access update语句执行_统一VBA中SQL语句执行的方法

ee8b359d1aca5d2e20294d2f6d0d2e5d.png

要在 Access 中用 VBA 中执行操作查询,在不创建查询对象的前提下,一般主要有3种方法:

1. Access本身的方法:

DoCmd.RunSQL strSQL

2. DAO的方法:

CurrentDb.Execute strSQL

3. ADO的方法:

CurrentProject.Connection.Execute strSQL

DoCmd.RunSQL 方法:

DoCmd.RunSQL 方法是Access本身的方法,理论上它是首先方式,因为它有进度条,还会有确认消息框,在查询对象中使用的“Forms!窗体名!控件名”这样的变量它也能支持。但是当我们用代码去执行的时候,我们都很确定自己是要干什么的,所以这个时候完全不想让它显示确认消息框。那么就只好在执行前关闭确认消息框了,示例代码如下 :

 DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True

从上面的示例代码中我们可以看出,每次调用 DoCmd.RunSQL 之前,都要用 DoCmd.SetWarnings False 关闭系统确认消息框,执行完之后再用 DoCmd.SetWarnings True 恢复系统确认消息框。使用的地方多了,就显得非常繁琐。

这里可能有童鞋会问,让系统确认消息框一直处于关闭状态,不就可以不用每次都关闭再开启这么麻烦了吗?理论上是可以这样干,但是,系统确认消息框不单是执行查询语句的时候用,它是全局性的,一直处于关闭状态,意味着如果你不小心误操作删除了某个表、查询、窗体、报表等,不会有提示,你修改设计发现不对想关闭不保存重新来过,没门儿,关闭时自动保存了,不会有确认提示。所以,我是强烈不建议你一直关闭系统确认消息框的。

CurrentDb.Execute 方法:

相比来说 DAO 的 CurrentDb.Execute 不支持“Forms!窗体名!控件名”变量,功能上要比 DoCmd.RunSQL 弱很多,但是架不住它简单省事。没有任何提示消息框,代码也相对简短。于是它变成了很多人使用最多的方法了。

CurrentProject.Connection.Execute 方法:

ADO 的 CurentProject.Connection.Execute 方法可能用得人就少了,无它,太长了,不够简短。用上一次两次还好,当你要几百几千次的使用时,不知道要多敲多少次键盘,而这种时候你会觉得多敲一个字符都累人。

但是该方法有一点另外2种方法无法代替:使用SQL语句创建小数类型(decimal)的字段。只有 ADO 的这个方法能正确执行,用另外两种方式会报错:

7535b01b8db41d812a33a607d3015136.png
3bc5bb507e30edd95199572edf419dc2.png
39c599cc7857ee8dcb943495827bd2b7.png

这是因为小数类型在早期的Access版本中是没有的,是后期版本才加入的,而DoCmd.RunSQL 和 CurrentDb.Execute 是Access一开始就有的东西,但这里又没有同样更新增加对小数类型的支持。而ADO则是DAO之后新一代的数据接口,它是出现在小数类型之后的,所以它可以支持小数类型。

综合上面一些信息,我们可以得到这样一个对比结果:

5ab3f479657aff9ee1513ce763557d70.png

通过上面的对比可以看出,3种方法各自都有其它方法无法代替的有用特性。于是大家在编写VBA代码时,3种方法夹杂使用,一会儿是 DoCmd.RunSQL strSQL, 一会儿又是 CurrentDb.Execute strSQL,看上去就显得很混乱无序。同时也容易给初学者造成困惑,增加学习难度,搞不清为什么一会儿用这个方法,一会儿用那个方法。

对于这个问题,本公子思考了很久,面壁九九八十一日,终于悟得了此门混元神功。

法门就是,创建一个通用的自定义函数,自动根据SQL语句,判断用哪种方法。这样就可以在所有执行SQL语句的地方,使用同一个方法,而不必为需要不停变脸而烦恼。

函数源码如下:

============================='函数名称: ClientRunSQL'功能描述: 整合执行SQL语句的3种方法: DoCmd.RunSQL、CurrentDb.Execute' CurrentProject.Connection.Execute,让代码统一标准化,使用更简单方便。'输入参数: SQLStatement 可以是单个SQL语句字串,也可以是包含多个SQL语句的数组或Collection集合。'返回参数: 无'相关调用:'使用注意:'兼 容 性:'参考资料:'作  者: 红尘如烟'创建时间: 2018-12-21'============================Public Function ClientRunSQL _ ( _ ByVal SQLStatement As Variant _ )  On Error GoTo ErrorHandler If varType(SQLStatement) = vbString Then SQLStatement = Array(SQLStatement) End If  Dim strExecutor As String  Dim varItem As Variant For Each varItem In SQLStatement If varItem Like "*Select *INTO *FROM *" Then strExecutor = "DoCmd" ElseIf varItem Like "*Forms!*!*" Then strExecutor = "DoCmd" ElseIf varItem Like "* COLUMN * DECIMAL(*,*)*" Then strExecutor = "ADO" Else strExecutor = "DAO" End If Next  If strExecutor = "DoCmd" Then DoCmd.SetWarnings False End If For Each varItem In SQLStatement Select Case strExecutor Case "DoCmd": ClientRunSQL CStr(varItem) Case "DAO": CurrentDb.Execute CStr(varItem) Case "ADO": CurrentProject.Connection.Execute CStr(varItem) End Select Next  If strExecutor = "DoCmd" Then DoCmd.SetWarnings True End If ExitHere: Exit Function ErrorHandler: MsgBox Err.Description, vbCritical, "Error #" & Err Resume ExitHereEnd Function'示例代码1: 执行单个语句Sub Test1() ClientRunSQL "Delete FROM 表1"End Sub'示例代码2: 执行多个语句Sub Test2() Dim colSQLs As New Collection With colSQLs .Add "Delete FROM 表1" .Add "Delete FROM 表2" .Add "Delete FROM 表3" .Add "Delete FROM 表4" End With ClientRunSQL colSQLs Set colSQLs = NothingEnd Sub

好了,少年,这本如来神掌……不好意思,拿错道具了……这本混元神功已经传授给你了。能不能修成正法,就看你的资质了!

文末彩蛋:这里函数名为什么是 ClientRunSQL 呢?没错,你猜对了,那是因为另外还有一个 ServerRunSQL!但那又是另一个故事了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算子基本思想_2.2 量子力学基本假设 Part 2

目录页:https://zhuanlan.zhihu.com/p/133306966这次文章主要介绍第三公设的一些应用2.2.4 区分量子态(Distinguishing quantum states)第三公设的一个重要应用就是区分量子态。在宏观世界,一个物体的不同状态至少在原则上是可以区分的。打个比方&#x…

一个人越聪明他大脑皮层神经元之间的联系就越少

来源:科学杂志 这是波鸿鲁尔大学的神经科学家与ErhanGen博士和Christoph Fraenz博士合作进行的一项研究的结果。这项研究是使用特定的神经影像技术进行的,该技术可在微观结构水平上洞悉大脑的连线。波鸿生物心理学研究小组的团队与阿尔伯克基新墨西哥大学…

力扣题目学习笔记(OC + Swift)21. 合并两个有序链表

21. 合并两个有序链表 链表解题经典三把斧: 哑巴节点栈快慢指针 此题比较容易想到的解法是迭代法,生成哑巴节点,然后迭代生成后续节点。 方法一、迭代法 Swift func mergeTwoLists(_ list1: ListNode?, _ list2: ListNode?) -> Li…

git查询当前目录下的文件列表_linux下查找文件,看这篇就够了

linux下文件查找命令用法总结。前言我们经常需要在linux系统中查找一个文件,或需要知道哪些文件包含已知的特有信息,便于快速对比排查、分析问题,那么如何准确高效查找呢?其实在linux下可查找文件的命令不止一个,命令附…

hive xmlserde_hive多分隔符

hive在建表时,通常使用ROW FORMAT DELIMITEDFIELDS TERMINATED BY "|#" 来限定数据中各个字段的分隔符,这种方式只支持单个分隔符,即:实际只会按照"|"进行分割,若想实现支持多分隔符,有…

Algorithm-Gossip(4) 三色棋(Three_Color_Flag)

前言 This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。 提出问题 Algorithm Gossip: 三色棋(Three_Color_Flag&#xff…

人工智能如何推动神经科技发展?

来源 | Forbes作者 | Margaretta Colangelo编译 | 科技行者神经科技以人类神经系统原理为基础,旨在研究人类大脑这一极为复杂的模型架构。在实际作用方面,神经科技将帮助研究人员了解大脑功能与引发功能障碍的原因,并助力医生治疗各类神经系…

tomcat lifecyclelistener_继续,来聊聊Tomcat的容器

作者:不学无数的程序员链接:https://urlify.cn/jYZFFf在这篇文章《Tomcat是如何运行的?整体架构又是怎样的?》中我们简单介绍了容器的概念,并且说了在容器中所有子容器的父接口是Container。在死磕Tomcat系列(2)——En…

java 绘制长方形_Java入门:绘制简单图形

在上一节,我们学习了如何使用swing和awt工具创建一个空的窗口,本节学习如何绘制简单图形。基本绘图介绍Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.awt包中。在我们自己的java程序文件中,要使用…

web面试常见问题补充

jquery Ajax $ajax({ Url:”test.html”,-----发送请求的地址 Async:true;------异步操作 Cache:true,-----可以从缓冲中加载 Type:”GET”,------请求方法 Datatype:”json”,-------服务器返回数据类型 Sucess:function(data){ ----------调用成功语句 If(data”OK”){ Conso…

如何与病毒搏斗?这部BBC“史诗级大片”告诉你答案

来源:惠在湖北 我们知道,在目前没有特效药和疫苗的情况下,被治愈的新型冠状病毒肺炎患者,离不开医学的帮助,而治愈的关键,依靠的是人体自身的免疫力。病毒是如何入侵的?免疫力从何而来&#xff…

单系统 台电x80pro_台电X80 Pro (E6E9)-双系统安装文件平板固件

这是台电X80 Pro (E6E9)-双系统安装文件平板固件,台电X80 Pro (E6E9)出来已经有一段时间了 相信大家都体验到了新机的强大了吧可使用时难免会发生一些意外 比如账户锁密码忘记 手机中毒 使用卡顿 不开机或者开机定屏 无故黑屏等 那怎么解决呢 今天就带大家一起来了解…

Ranklib源码剖析--LambdaMart

Ranklib是一套优秀的Learning to Rank领域的开源实现,其中有实现了MART,RankNet,RankBoost,LambdaMart,Random Forest等模型。其中由微软发布的LambdaMART是IR业内常用的Learning to Rank模型,本文主要介绍…

gentoo linux 分区_小白安装Gentoo Linux操作系统——磁盘分区

磁盘分区规划在日常安装Gentoo Linux操作系统前需要对系统使用的磁盘分区进行规划,规划原则需考虑磁盘容量、系统规模与用途。现阶段个人PC的磁盘容量已近乎TB级别,磁盘容量已不再成为系统安装的约束,那么对系统规模与用途的考虑则是安装Gent…

markdown 行内公式_使用Markdown快速编辑公众号技巧之mdnice

请使用 Chrome 浏览器。请阅读下方文本熟悉工具使用方法,本文可直接拷贝到微信中预览。1 Markdown Nice 简介支持自定义样式的 Markdown 编辑器支持微信公众号、知乎和稀土掘金欢迎扫码回复「排版」加入用户群2 主题https://preview.mdnice.com/themes/欢迎提交主题…

AI人必看!89页全网最全清华知识图谱报告(附PDF)

来源:智东西知识图谱(Knowledge Graph)是人工智能的重要分支技术,它在2012年由谷歌提出,成为建立大规模知识的杀手锏应用,在搜索、自然语言处理、智能助手、电子商务等领域发挥着重要作用。知识图谱与大数据…

mui.init方法配置

mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可,目前支持在mui.init方法中配置的功能包括: 创建子页面、 关闭页面、 手势事件配置、 预加载、 下拉刷新、上拉加载、 设…

python wx模块下choice列表框值怎么更新_wx python

一、静态文本控件wx.StaticText(parent, id, label, poswx.DefaultPosition, sizewx.DefaultSize, style0, name"staticText")wx.StaticText构造函数的参数parent:父窗口部件。id:标识符。使用-1可以自动创建一个唯一的标识。label&#xf…

AI战“疫”!人工智能在疫情中的重要作用

来源:腾讯新闻网新冠肺炎疫情牵动着全国人民的心!在防控疫情部署落实工作中,上海着力将人工智能等现代信息技术深入应用于疫情态势研判、传播路径分析、精准防控、有效治疗及后续治理等各工作环节。通过提供更加精准有效的科学决策依据&#…

linux 判断指针是否可读_Linux进程间通信——消息队列

概念什么是消息队列?消息队列亦称报文队列,也叫做信箱。是Linux的一种通信机制,这种通信机制传递的数据具有某种结构,而不是简单的字节流。消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了…