access 导入 txt sql语句_Excel VBA+ADO+SQL入门教程18:DELETE删除语句

点上方 关注我们 ,每日 1练 ,每天进步一点点 e8fe9dede3d793d5381e4a2b20cd9fa6.gif本系列更多文章后台回复关键字SQL即可。  1. ……诸君好啊,又见面了。 聊了十几期,总算把SQL查询语句聊完了,打个哈欠先。 ……SELECT查询语句是SQL的核心,聊完了它,剩下的就简单了……掰掰我的手指头……关于SQL,我们大概还有3个部分没讲,分别是DELETE删除、UPDATE更新以及INSERT新增。 这3个语句讲完,本系列的SQL也就告一段落了。 。 。 。 我们今天先来讲DELETE语句,顾名思义,也就是如何从数据库中删除数据。   其基础语法如下: DELETE FROM 表名 WHERE 条件 WHERE条件不是必须的,但当没有WHERE子句等删除条件时,DELETE会删除表中所有的记录; 因此当DELETE忘记了WHERE,后果通常如下图所示: c75c0dd1ad115595f031d4b6ac19aac6.gif             2. 举个例子。 有一个文件夹,内有一份Excel工作簿和一份ACCESS文件(点击文末可以下载该示例文件) 9e836ad337cf103494a23262fb6ff2c5.png            我们现在需要通过Excel VBA,按指定条件删除ACCESS文件中表名为’成绩表’的数据行。 ACCESS ‘成绩表’的模样如下图所示。 2d36a24923a6d14867e9a4cc54aa7790.png            现在,假设我们需要删除姓名为’看见星光’的记录行。 SQL语句如下: DELETE FROM 成绩表 WHERE 姓名='看见星光' 第1章的时候我们就说过,EXCEL执行SQL的操纵语句,需要通过VBA+ADO的方式; 第2章我们也介绍了如何使用VBA引用ADO对象并执行SQL语句。 综上,在VBA中使用DELETE语句完整代码如下:
Sub DoSql1()    Dim cnn As Object    Dim strPath As String, strCnn As String, strSQL As String    Set cnn = CreateObject("adodb.connection")    strPath = ThisWorkbook.Path & "\数据库.accdb"    strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath    cnn.Open strCnn    strSQL = "DELETE FROM 成绩表 WHERE 姓名='看见星光'"    cnn.Execute (strSQL)    cnn.Close    Set cnn = NothingEnd Sub
而假设我们需要删除ACCESS文件中,EXCEL当前工作表(表名为’操作表’)A列出现的姓名数据。 69cbc105c0e657776a7bd1bfeb9432b5.png            代码如下:
Sub DoSql2()    Dim cnn As Object    Dim strPath As String, strCnn As String, strSQL As String    Set cnn = CreateObject("adodb.connection")    strPath = ThisWorkbook.Path & "\数据库.accdb"    strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath    cnn.Open strCnn    strSQL = "delete from 成绩表 where 姓名 in (select * from [Excel 12.0;database=" & ThisWorkbook.FullName & "].[操作表$a:a])"    cnn.Execute (strSQL)    cnn.Close    Set cnn = NothingEnd Sub
代码中SQL语句使用了IN运算符和子查询,关于子查询,参考过往帖:Excel VBA+ADO+SQL入门教程13:子查询 代码中ADO创建的连接是ACCESS文件,在此基础上,SQL语句查询Excel工作簿工作表的数据时,使用了[Excel 12.0;database=" & ThisWorkbook.FullName & "].[操作表$a:a]的语句。
该知识点参考:Excel VBA+ADO+SQL入门教程004:SQL查询中"表"技巧的总结 当然,也可以使用关联语句作为删除条件执行DELETE,代码如下:
Sub DoSql3()    Dim cnn As Object, strSQL1 As String    Dim strPath As String, strCnn As String, strSQL As String    Set cnn = CreateObject("adodb.connection")    strPath = ThisWorkbook.Path & "\数据库.accdb"    strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath    cnn.Open strCnn    strSQL1 = "[Excel 12.0;database=" & ThisWorkbook.FullName & "].[操作表$a:a] b"    strSQL = "delete distinctrow a.* from 成绩表 a inner join " & strSQL1 & " on a.姓名=b.姓名"    cnn.Execute (strSQL)    cnn.Close    Set cnn = NothingEnd Sub
DELETE子句指定了需要删除记录行的表名(delete distinctrow a.*),并使用内连接inner join的查询结果作为删除条件。 需要注意的是,DELETE后有个关键字DISTINCTROW,这通常是ACCESS DELETE使用关联查询方案时必备的; 而SQL Server则并不需此用法。 ACCESS(JET SQL)与SQL SERVER(T-SQL)有很多不同,这不是我们系列教程的重点,略过,感兴趣的朋友可以自行百度。  3. 为什么例子中使用了ACCESS文件,而不是EXCEL呢? 为什么不举个使用DELETE语句删除EXCEL某个表的记录行的例子呢? 不是不想,是臣办不到啊。 bbb8857f552560858b5be7b7253dee52.png            对于EXCEL文件,SQL可以删除单元格内的值,但不能使用DELETE语句删除整条记录,或者说删除单元格自身; 否则会收到以下错误提示: 2e6ef6cfb7cb89883e55669a24cf2670.png            那么如何使用SQL删除单元格内的值呢? 我们下期讲UPDATE语句。 就酱紫,挥手再见。
文件下载:
https://pan.baidu.com/s/1PxEH7E60wuCvlvPHInS6XQ%20
提取码:3838   系统学习Excel,推荐加入我的Excel社群

9bf63f6e3bab022540676340381c1250.png

更多教程&练习

  • 001:零基础学Excel(一)什么是Excel?

  • 002:30个工作日后(含特定节假日)是哪天?

  • 003:连续区间查询的常用方法有哪些?


©看见星光 31b8f6ec9a69d37b5ad4a9d17a2dfd72.png
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页