ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > VBA+ADO+SQL系列学习教程(1)

VBA+ADO+SQL系列学习教程(1)

作者:绿色风 分类: 时间:2022-08-18 浏览:115
楼主
wise
VBA结合SQL来操作Access、SQL Server在工作中经常用到,本人在近一个多月里面,常常用到VBA+SQL来进行编程。
以下将慢慢地讲述一系列操作。

1、前提条件:在当前路径下创建一个名为“数据库”的Access文件。
     Q:如何使用VBA及SQL在Access文件中创建一个名称为“人员”,里面的字段为姓名、年龄的表。
     A:ALT+F11→插入模块,在模块中插入以下代码:
  1. Sub CreateTable()
  2.   '定义变量
  3.   Dim Adoconn As Object
  4.   Dim Strconn As String
  5.   Dim StrSQL As String
  6.   
  7.   StartTime = Timer
  8.    '后绑定数据库
  9.   Set Adoconn = CreateObject("ADODB.Connection")
  10.   '设置连接字符串
  11.   Strconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & Application.PathSeparator & "数据库.accdb;"
  12.     '创建表的SQL语句
  13.   StrSQL = " CREATE TABLE 人员 (姓名 Char, 年龄 Integer)"
  14.    '打开数据库连接
  15.   Adoconn.Open Strconn
  16.    '执行SQL语句
  17.   Adoconn.Execute StrSQL
  18.     '关闭数据库连接
  19.   Adoconn.Close
  20.   MsgBox Timer - StartTime
  21. End Sub
在本例中,为了适应各电脑中,采用了后绑定调用数据库:
  1. Set Adoconn = CreateObject("ADODB.Connection")
而因为需要知道该数据库的路径,必须要通过Provider告知ADO使用哪个OLE DB提供者。本例中因为使用了Access 2010 ,故其为:
  1. Provider=Microsoft.ACE.OLEDB.12.0;
而该文件的路径及数据库名称则通过设置连接字符串中其他字符实现。
值得注意创建数据库的SQL格式为:
  1. Create Table 名称  (字段1  字段1字段类型,字段2  字段2字段类型)
而执行SQL语句的话,必须首先打开数据库文件,导致产生了该操作:
  1. Adoconn.Open Strconn
注意里面的open操作
打开数据库后,则需要执行数据库,此时的执行SQL代码是:
  1. Adoconn.Execute StrSQL
注意Execute操作,其为执行该SQL代码。
执行完毕后,需要关闭数据库,此时代码为:
  1. Adoconn.Close
从上面代码分析可以知道VBA+ADO+SQL操作步骤是:
1、后绑定数据库
2、确定数据库的来源于哪个OLE DB,并且其路径及数据库
3、编写SQL代码
4、打开数据库
5、执行SQL语句
6、关闭数据库


2楼
wise
在上一个例子中,是创建数据库的,下面第二个例子
Q:如何使用VBA+ADO+SQL删除当前路径下“数据库.accdb"中的”人员“表?
A:代码如下:
  1. Sub DeleteTable()
  2.   Dim Adoconn As Object
  3.   Dim Strconn As String
  4.   Dim StrSQL As String
  5.   Dim StarTime As Variant
  6.   
  7.   StartTime = Timer
  8.   '后绑定数据库
  9.   Set Adoconn = CreateObject("ADODB.Connection")
  10.   '设置连接字符串
  11.   Strconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & Application.PathSeparator & "数据库.accdb;"
  12.   '删除表的SQL语句
  13.   StrSQL = "DROP Table 人员"
  14.   '打开数据库连接
  15.   Adoconn.Open Strconn
  16.   '执行SQL语句
  17.   Adoconn.Execute StrSQL
  18.   '关闭数据库连接
  19.   Adoconn.Close
  20.   MsgBox Timer - StarTime
  21.   
  22. End Sub
注意,删除数据库的SQL代码格式是:
  1. Drop Table  表名称
表示删除指定表。
3楼
wise
Q:如何使用VBA+ADO+SQL来创建新的字段?
A:ALT+F11→插入模块,在模块输入代码:
  1. Sub InsertNewColumn()
  2. Dim Adoconn As Object
  3. Dim Strconn As String
  4. Dim StrSQL As String
  5. Dim StarTime As Variant

  6. StarTime = Timer
  7. '后绑定数据库
  8. Set Adoconn = CreateObject("ADODB.Connection")
  9. '设置连接字符串
  10. Strconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & Application.PathSeparator & "数据库.accdb;"
  11. '添加新字段的SQL语句
  12. StrSQL = "ALTER TABLE 学生 ADD COLUMN 专业 Char"
  13. '打开数据库连接
  14. Adoconn.Open Strconn
  15. '执行创建表的SQL语句
  16. Adoconn.Execute " Create Table  学生 (姓名 char,年龄 integer)"
  17. '执行SQL语句
  18. Adoconn.Execute StrSQL
  19. '关闭数据库连接
  20. Adoconn.Close
  21. MsgBox Timer - StarTime
  22. End Sub
注意SQL语句:
  1. ALTER TABLE 学生 ADD COLUMN 专业 Char
在表中插入新字段的格式为:
  1. ALTER TABLE 表名  ADD COLUMN  字段名  字段类型
但在插入该字段之前,必须确保表名已经创建好的。
在本程序中,通过该代码确保表已经创建完毕:
  1. Adoconn.Execute " Create Table  学生 (姓名 char,年龄 integer)"
4楼
wise
Q:如何使用VBA+ADO+SQL删除数据库里面表的字段?
A:ALT+F11→插入模块,在模块中输入以下代码:
  1. Sub DeleteColumn()
  2. Dim Adoconn As Object
  3. Dim StrConn As String
  4. Dim StrSQL As String
  5. Dim StarTime As Variant

  6. StarTime = Timer
  7. '后绑定数据库
  8. Set Adoconn = CreateObject("ADODB.Connection")
  9. '设置连接字符串
  10. StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & Application.PathSeparator & "数据库.accdb;"
  11. '删除字段的SQL语句
  12. StrSQL = "ALTER  TABLE 学生 DROP  COLUMN 专业"
  13. '打开数据库连接
  14. Adoconn.Open StrConn
  15. '执行SQL语句
  16. Adoconn.Execute StrSQL
  17. '关闭数据库连接
  18. Adoconn.Close
  19. MsgBox Timer - StarTime
  20. End Sub
删除字段的SQL代码如下:
  1. ALTER TABLE 表名  DROP COLUMN 字段名
5楼
wise
Q:如何利用VBA+ADO+SQL修改数据库里面的字段类型呢?
例如修改当前路径下的”数据库.accdb"中“学生”表中的“年龄”字段为char(5),如何操作呢?
A:ALT+F11→插入模块,在模块中输入以下代码:
  1. Sub ChangeType()
  2. Dim Adoconn As Object
  3. Dim Strconn As String
  4. Dim StrSQL As String
  5. Dim StarTime As Variant

  6. StarTime = Timer
  7. '后绑定数据库
  8. Set Adoconn = CreateObject("ADODB.Connection")
  9. '设置连接字符串
  10. Strconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & Application.PathSeparator & "数据库.accdb;"
  11. '修改字段类型的SQL语句
  12. StrSQL = " ALTER TABLE 学生 ALTER COLUMN 年龄 Char(5)"
  13. '打开数据库连接
  14. Adoconn.Open Strconn
  15. '执行SQL语句
  16. Adoconn.Execute StrSQL
  17. '关闭数据库连接
  18. Adoconn.Close
  19. MsgBox Timer - StarTime

  20. End Sub
在本例中,利用ALTER TABLE语句修改字段类型的格式为:
  1. ALTER TABLE 表名 ALTER  COLUMN 字段名  修改后的字段类型
6楼
wise
Q:如何利用VBA+ADO+SQL把数据库某表复制到另外一个数据库中?
A:ALT+F11→插入模块,在模块中输入代码:
  1. Sub InToNew()
  2. Dim AdoConn As Object
  3. Dim StrConn As String
  4. Dim StrSQL As String
  5. Dim StarTime As Variant

  6. StarTime = Timer
  7. '后绑定数据库
  8. Set AdoConn = CreateObject("ADODB.Connection")
  9. '设置连接字符串
  10. StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & Application.PathSeparator & "数据库.accdb;"
  11. '复制基础数据到另外一个数据库
  12. StrSQL = " SELECT * INTO [" & ThisWorkbook.Path & Application.PathSeparator & "新数据库.accdb].新基础数据 FROM 基础数据"
  13. '打开数据库连接
  14. AdoConn.Open StrConn
  15. '执行SQL语句
  16. AdoConn.Execute StrSQL
  17. '关闭数据库连接
  18. AdoConn.Close
  19. MsgBox Timer - StarTime

  20. End Sub
在此处值得关注的是:
  1. SELECT * INTO [database].Newtable  FROM SOURCE
其中参数database代表目标数据库,而newtable 为目标数据表,Source代表源数据表
在本例中具体体现为:
  1. StrSQL = " SELECT * INTO [" & ThisWorkbook.Path & Application.PathSeparator & "新数据库.accdb].新基础数据 FROM 基础数据"
本例子中的:ThisWorkbook.Path & Application.PathSeparator & "新数据库.accdb  代表本目录的“新数据库.accdb”文件。值得注意的是路径两边的[]不能省略

7楼
wise
Q:如何使用VBA把表的数据添加到Access表中?
A:ALT+F11→插入模块,输入以下代码:
  1. Sub INSERT()
  2. Dim AdoConn As Object
  3. Dim StrConn As String
  4. Dim StrSQL As String
  5. Dim i As Long
  6. On Error Resume Next
  7. Set AdoConn = CreateObject("ADODB.Connection")
  8. StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & ThisWorkbook.Path & Application.PathSeparator & "数据库.accdb;"
  9. StrSQL = " Create table 流量 (地市 char, 普通用户 double,零M double,小于10M  double )"
  10. '打开数据库连接
  11. AdoConn.Open StrConn
  12. '执行SQL语句
  13. AdoConn.Execute StrSQL
  14. '关闭数据库连接
  15. AdoConn.Close

  16. '打开数据库连接
  17. AdoConn.Open StrConn
  18. For i = 2 To Range("A" & Cells.Rows.Count).End(xlUp).Row
  19.    StrSQL = "Insert into 流量 ( 地市,普通用户,零M,[小于10M]) values ( '" & Cells(i, 1) & "'," & Cells(i, 2) & "," & Cells(i, 3) & "," & Cells(i, 4) & ")"
  20.    '执行SQL语句
  21.    AdoConn.Execute StrSQL
  22. Next i
  23. '关闭数据库连接
  24. AdoConn.Close

  25. End Sub
首先创建一个“流量” 表,然后使用Insert into往表中添加数据。
Insert into 语法为:
  1. Insert into 表 (字段1,字段2,字段3) values (值1,值2,值3)
注意,如果值是字符类型,则在字符两边添加单引号(');如果是日期形式,则两边添加"#";数值类型则不需添加。

tu.png  
8楼
wise
待定占位4
9楼
wise
待定占位5
10楼
wise
待定占位6
11楼
DJ_Soo
喔,77又开始玩VBA了
12楼
wise
工作干活用到了,不是玩啊
13楼
DJ_Soo
工作用到也可以是玩呀,嘿嘿,要不写代码就没意思了
14楼
wise
很讨厌写代码啊,白天写,晚上头痛,还是以前写PPT比较好
15楼
DJ_Soo
囧哦,我见到ppt头晕
16楼
朽木
这个在数据挖掘中很有用。
17楼
qinhuan66
好好学习天天向上
18楼
335081548
谢谢分享

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap