谢谢金宇, 可以导入. 但是还存在两个问题, 一是需要先建好一张空表,准备导入数据; 二是代码中列举了所有字段, 但是字段很多的话就不行了. 不知道是否能解决. 我把金宇的代码贴一下,大家可以看看.
方法一:
Private Sub btnIn_Click()
Dim conn As Object
Dim rst As Object
Dim rst1 As Object
Dim strSQL As String
Set conn = CreateObject("adodb.connection")
conn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & CurrentProject.Path & ";Extensions=asc,csv,tab,txt;Persist Security Info=False" '打开数据链接
strSQL = "select * from [测试表.csv]"
Set rst = conn.Execute(strSQL)
Set rst1 = CurrentDb.OpenRecordset("测试表", dbOpenDynaset, dbAppendOnly)
Do While Not rst.EOF
rst1.AddNew
rst1("编号") = rst("编号")
rst1("姓名") = rst("姓名")
rst1("性别") = rst("性别")
rst1("年龄") = rst("年龄")
rst1.Update
rst.MoveNext
Loop
rst.Close
rst1.Close
MsgBox "导入成功!"
DoCmd.OpenTable "测试表"
End Sub
方法二:
Private Sub btnIn2_Click()
Dim strSQL As String
strSQL = "Insert INTO 测试表(编号,姓名,性别,年龄) Select 编号,姓名,性别,年龄 FROM [TEXT;FMT=CSV;DELIMITED;HDR=YES;DATABASE=" & CurrentProject.Path & "].[测试表.csv];"
DoCmd.RunSQL strSQL
DoCmd.OpenTable "测试表"
End Sub
我是因为要需要测试示例所以才需要预先建一张空表,如果你有需要导入的Access表,那么在代码中指定需要导入的表就行,
Set rst1 = CurrentDb.OpenRecordset("测试表", dbOpenDynaset, dbAppendOnly) 这行代码中的“测试表”改为你需要实际导入的Access表名称就行。
我做了个示例只是起到参考引导作用的,因为我并不清楚你具体有多少个字段及其它情况,你要根据你具体的实际情况对示例代码进行调整以适应你的需求,需要增加字段的话你可以参考我的代码往下增加就行了。
rst1("编号") = rst("编号")
rst1("姓名") = rst("姓名")
rst1("性别") = rst("性别")
rst1("年龄") = rst("年龄")
下面可以不断增加字段保存代码的,例如
rst1("字段5") = rst("名称5")
rst1("字段6") = rst("名称6")
...........
我本来的想法是,能不能写一段代码,作用相当于ACCESS的“导入文本向导”,把向导里需要选择的几个参数都在vba代码中设置好。然后导入的时候只需要点击导入按钮,弹出来资源管理器窗口,去找到想要导入的文本格式数据,选中后确定就直接导入到ACCESS。我不知道这个设想是否能实现。
使用上面两种导入方法后不需要再去设置字段分隔符和文本识别符,弹出资源管理器窗口选择要导入的csv文件是可以的。
将上面方法一的代码修改为如下就行
Dim conn As Object
Dim rst As Object
Dim rst1 As Object
Dim strSQL As String
Dim strSelectFile As String
Dim strPath As String
Dim strFileName As String
With Application.FileDialog(3)
.AllowMultiSelect = False
.InitialFileName = ""
.Filters.Clear
.Filters.Add "CSV文件", "*.CSV"
If .Show = -1 Then
strSelectFile = .SelectedItems.Item(1)
Else
Exit Sub
End If
End With
strPath = Left(strSelectFile, InStrRev(strSelectFile, "\"))
strFileName = Mid(strSelectFile, InStrRev(strSelectFile, "\") + 1)
Set conn = CreateObject("adodb.connection")
conn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & strPath & ";Extensions=asc,csv,tab,txt;Persist Security Info=False" '打开数据链接
strSQL = "select * from [" & strFileName & "]"
Set rst = conn.Execute(strSQL)
Set rst1 = CurrentDb.OpenRecordset("测试表", dbOpenDynaset, dbAppendOnly)
Do While Not rst.EOF
rst1.AddNew
rst1("编号") = rst("编号")
rst1("姓名") = rst("姓名")
rst1("性别") = rst("性别")
rst1("年龄") = rst("年龄")
rst1.Update
rst.MoveNext
Loop
rst.Close
rst1.Close
MsgBox "导入成功!"
DoCmd.OpenTable "测试表"