ACCESS的查询中只能执行一条SQL语句,并不支持存储过程,不能直接运行SQL脚本,但我们可以利用VBA自定义一个子程序,用它来执行文本文件中的SQL语句,模拟大型数据库中的存储过程。
1、新建一个文本文件,每行一条SQL语句,其格式如以下示例所示:
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("张丹丹","32061721400071","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("刘本华","32061721400089","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("柳小双","32061721400076","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("谢清靓","42061721300106","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("魏二丽","42061721300107","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("龚倩怡","42061721600318","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("江寒梦","42061721300129","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("邓兆俊","42061721300099","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("有雪梅","42061721300120","301A");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("刘立平","42061721300115","301");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("丁长荣","42061721300122","301A");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("肖瑞芳","42061721300130","301A");
Insert INTO 缺考信息 (XM,ZKZH,QKKM) values ("刘静坤","42061721300110","301A");
当然,这只是个示例,不一定语句都相同,只要是ACCESS支持的SQL语句就行了,只要一行一句就可以了。
2、把文本文件保存为名为sql.txt的文件,与运行代码的数据数据库放在同一个文件夹下,如果放在其它目录下,就必须修改VBA代码中的打开文件路径了。
3、打开数据库,按ALT+F11打开VBE窗口,插入一个标准模块,在代码窗口在输入以下VBA代码,只要其中一个子程序就可以了,因为这两个子程序的功能是一样的。
Sub SqlScripts()
Dim vSql As Variant
Dim vSqls As Variant
Dim strSql As String
Dim intF As Integer
intF = FreeFile()
Open CurrentProject.Path & "\sql.txt" For Input As #intF
strSql = StrConv(InputB(LOF(intF), intF), vbUnicode) '含有中文
Close intF
vSql = Split(strSql, ";")
On Error Resume Next
For Each vSqls In vSql
CurrentDb.Execute vSqls
Next
End Sub
Public Sub ExecSQLScriptFile()
Dim TextLine As Variant
Dim intF As Integer
intF = FreeFile()
Open CurrentProject.Path & "\sql.txt" For Input As #intF ' 打开文件。
Do While Not EOF(intF) ' 循环至文件尾。
Line Input #intF, TextLine ' 读入一行数据并将其赋予某变量。
CurrentDb.Execute TextLine ' 在立即窗口中显示数据。
Loop
Close #intF ' 关闭文件。
End Sub
4、在VBE的立即窗口中输入子程序的名称,然后回车就会依次执行文本文件中的每条SQL语句,跟运行存储过程类似。