将Excel文件里的表格数据保存到现有的Access数据库里
虽然,Excel文件本身可以视为一个微型的数据库,在提取数据时应付简单条件的查询完全没有问题,如果涉及到复杂条件的数据查询,用Excel文件来储存大量数据就会效率低下很多,而且当Excel文件很大的时候,对其他系统资源和内存开销也是一种压力。
通常都是把数据保存到规模更大一点的数据库,比如Access,My SQL,SQL Server,DB2,Oracle等数据库。那么这次就讨论一下,当我们选择Access数据库来保存生产数据时,如何把Excel文件的表格数据导入到Access中,这在现实应用场景中也是会经常出现的。
下面我们就详细研讨一下,如何利用VBA程序把Excel里的数据保存到现有Access数据库中。假设 我们现有一个名为“准备导入数据”的Excel文件,它里面的Sheet1工作表里有学生成绩数据,需要把这些学生成绩数据导入到一个名为“学生成绩”的Access数据库里的名为“成绩汇总”的表中。
在实现上述任务过程中,我们需要利用到ADO对象,SQL语句,For-Next语句,利用循环结构把成绩数据逐条导入到Access里面。在开始编码之前,首先要在VBA工程里添加项目库 Microsoft Access 14.0 Object Library的引用。笔者的工作环境是 Win7 64位操作系统+Office2010套件,如果感兴趣的朋友的Office版本有所不同,请选择对应版本的库文件来引用。
编码之前准备工作截图如下:
程序执行后结果截图如下:
完整实现代码如下:
Public Sub Excel数据导入Access()
Dim mydata As String, myTable As String, SQL As String
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim rsx As ADODB.Recordset
Dim i As Long, n As Long
mydata = T & "\学生成绩.accdb"
myTable = "成绩汇总"
n = Sheets("Sheet1").Range("A65536").End(xlUp).Row
Set cnn = New ADODB.Connection
cnn.Open "Provider=Micro;Data Source =" & mydata & ""
MySQL = "select * from " & myTable
Set rs = New ADODB.Recordset
rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic
For i = 2 To n
SQL = "select * from " & myTable & " where 姓名='" & Cells(i, 1).Value & "' "
Set rsx = New ADODB.Recordset
r SQL, cnn, adOpenKeyset, adLockOptimistic
If r = 0 Then
r
For j = 1 To r
r(Cells(1, j).Value) = Cells(i, j).Value
Next j
r
Else
For j = 2 To r
r(j - 1) = Cells(i, j).Value
Next j
r
End If
Next i
MsgBox "数据保存完毕!", vbInformation + vbOKOnly
rs.Close
cnn.Close
Set rs = Nothing
Set rsx = Nothing
Set cnn = Nothing
End Sub
说明:此处笔者创建的数据库是没有密码的,如果感兴趣的朋友在实现时,设置了Access访问密码,需要在连接语句里把密码放进来。此外,如果在数据表里已经存在某个学生的成绩,此时程序会自动覆盖之前保存的数据。