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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

【人工智能】中科院2019全球人工智能发展白皮书!八大关键技术中国崛起中,国产AI芯片耀眼...

来源:产业智能官人工智能是一个很宽泛的概念,概括而言是对人的意识和思维过程的模拟,利用机器学习和数据分析方法赋予机器类人的能力。人工智能将提升社会劳动生产率,特别是在有效降低劳动成本、优化产品和服务、创造新市场和就业…

斜度符号标注_几何作图之斜度和锥度

虽然机件的形状各有不同,但它们的图样基本上都是由直线、圆弧和其它一些曲线所组成的几何形体。因此在绘图时,常常要运用一些几何作图方法。斜度和锥度1.斜度(GB/T 4458.4-2003)斜度是指一直线(或平面)对另一条直线(或平面)的倾斜程度&#x…

shiro 手动创建session_Shiro 和 spring boot 的集成

1 添加依赖使用 shiro-spring-boot-web-starter 在 spring boot 中集成 shiro 只需要再添加一个依赖<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring-boot-web-starter</artifactId><version>1.4.1</version…

动态规划 所有题型的总结

1 动态规划 1.1 定义 动态规划的核心是状态和状态转移方程。 在记忆化搜索中&#xff0c;可以为正在处理的表项声明一个引用&#xff0c;简化对它的读写操作&#xff1b; 动态规划解决的是多阶段决策问题&#xff1b; 初始状态→│决策&#xff11;│→│决策&#xff12;│→……

美智库:马赛克战是人工智能与自主系统支撑的决策中心战

来源&#xff1a;国防科技要闻编者按2020年2月11日&#xff0c;美战略与预算评估中心发布报告《马赛克战&#xff1a;利用人工智能和自主系统实施决策中心战》。针对大国战略竞争&#xff0c;报告建议美国防部摒弃当前以消耗战为中心的理念&#xff0c;采用决策中心战。报告分析…

echarts山东地图_用 Python 绘制个人足迹地图

前两年&#xff0c;足迹地图小程序风靡朋友圈&#xff0c;一时间大家都流行晒自己的旅行地图。但是&#xff0c;笔者最近体验了好几款足迹地图的小程序&#xff0c;发现这些小程序虽然号称是足迹地图&#xff0c;但最多只是展示到省级别&#xff0c;无法精确到市级别&#xff0…

AI 芯片发展的前世今生

来源&#xff1a;《微纳电子与智能制造》期刊作者&#xff1a;任 源、潘 俊、刘京京、何燕冬、何 进现代电子产品和设备在诸如通信 、娱乐 、安全和医疗保健等许多方面改善了我们的生活质量 &#xff0c;这主要是因为现代微电子技术的发展极大地改变了人们的日常工作和互动方式…

用户解锁不存在_苹果推送iOS 13.5测试版,戴口罩解锁更顺畅

目前最新的 iOS 系统正式版为 13.4.1&#xff0c;之前苹果已经开始 iOS 13.4.5 的测试工作&#xff0c;并于 4 月 16 日推送了 Beta2 版本。令人意外的是&#xff0c;今日凌晨苹果为参与测试的设备直接推送了 iOS 13.5 的测试版更新&#xff0c;而且是 Beta3 版本(「iOS 13.5 B…

shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构

浅谈Linux下shell 编程的for循环常用的6种结构1、 常用for循环结构(1)for 变量 in 值1 值2 值3...do程序块儿done(2)for 变量 in 命令 (或者$())do程序块儿done(3)for 变量 in {1..100}do程序块儿done(4)for 变量 in "$"do程序块儿done(5)for 变量 in /etc/*.confdo程…

案例163:基于微信小程序的校园二手交易平台系统设计与开发

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...

来源&#xff1a;专知【导读】生成式对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GANs&#xff09;作为近年来的研究热点之一&#xff0c;受到了广泛关注&#xff0c;每年在机器学习、计算机视觉、自然语言处理、语音识别等上大量相关论文发表。密歇根大学…