|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 mctrix 于 2016-1-27 08:38 编辑
观看“zhaogang1960”版主的帖子【用ExcelVBA将多个列数不完全相同的文本文件或csv数据导入到Access数据库中的三种方法】
然后自己在用方法3时,报错“INSERT INTO语法错误”,不知道问题在哪里,贴出来请大家看看问题出在哪里。
介绍:
1.附件中三个文件,1个txt文本,1个Access数据库(包含1个test表),1个Excel工作薄(含VBA代码的空白工作薄);
2.想在Excel中使用VBA将txt文本的内容导入到Access数据库test表下面(不删除原有数据);
3.txt文本内容使用TAB间隔,含多行数据;
4.Excel、Access使用的均为2013版本;
附上代码:
- Sub txtImportAccess()
- Dim cnn As Object 'ADODB连接对象
- Dim myPath$, myFile$, SQL$
- Set cnn = CreateObject("ADODB.Connection")
- cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb" '连接数据库
- myPath = ThisWorkbook.Path & ""
- myFile = Dir(myPath & "*.txt")
- If myFile <> "" Then
- SQL = "select * from [Text;FMT=TabDelimited;HDR=NO;DATABASE=" & myPath & ";].[" & myFile & "]"
- End If
- SQL = "Insert Into test" & SQL '向access数据表中添加数据语句
- cnn.Execute SQL
- MsgBox "已经成功将文本文件数据保存为数据库!", vbInformation
- cnn.Close
- Set cnn = Nothing
- End Sub
复制代码
报错信息:
使用VBA将txt导入Access.zip
(1.41 MB, 下载次数: 146)
问题已经解决:你在这个帖子中可以获取到。再次感谢zhaogang1960老师!!!
1. 在Excel中使用VBA把文本文件数据导入到Access数据库;
2. 如果被导入的文本文件中第一列文本与数字混排,需要指定各自的数据类型;
关键字:VBA,TXT,ACCESS,SCHEMA.INI,ADODB.CONNECTION,SQL, [Text;FMT=TabDelimited;HDR=NO]
贴上关键代码如下:
- Sub txtImportAccess()
- Dim cnn As Object
- Dim myPath$, MyFile$, SQL$, s$
- Set cnn = CreateObject("ADODB.Connection")
- cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb" '连接数据库
- myPath = ThisWorkbook.Path & ""
- MyFile = ThisWorkbook.Path & "\Test.txt"
- If Dir(ThisWorkbook.Path & "\Test.txt") <> "" Then
- SQL = "Insert Into test select f1 as 号码,f2 as 批号,f3 as 日期,f4 as 时间,f5 as 备注 from [Text;FMT=TabDelimited;HDR=NO;DATABASE=" & myPath & ";].[Test.txt]"
- s = "[Test.txt]" & vbCrLf & "COLNAMEHEADER = false" & vbCrLf & "Format = TabDelimited" & vbCrLf & "Col1=f1 Char" & vbCrLf & "Col2=f2 Char" & vbCrLf & "Col3=f3 DATE" & vbCrLf & "Col4=f4 Char" & vbCrLf & "Col5=f5 Char"
- Open myPath & "schema.ini" For Output As #1
- Print #1, s
- Close #1
- cnn.Execute SQL
- Kill ThisWorkbook.Path & "\schema.ini"
- End If
- MsgBox "已经成功将文本文件数据保存为数据库!", vbInformation
- cnn.Close
- Set cnn = Nothing
- End Sub
复制代码
问题已经解决。再次感谢zhaogang1960老师,老师对Excel中VBA与数据库的操作研究很深。在这个帖子中你可以学到:
1. Excel中使用VBA将txt文本导入到Access中:可以是单个文本、也可以是多文本;
2. ADODB连接对象在执行SQL语句时,会读取Schema.ini中设置;
3. 被导入Access的txt文本若第一行数字与文本混排,则需要在Schema.ini中各自指定其数据类型;
关键字:VBA,TXT,文本,ACCESS,ADODB,SQL,SCHEMA.INI,[Text;FMT=TabDelimited;HDR=NO;]
贴上关键代码:
- Dim cnn As Object
- Dim myPath$, MyFile$, SQL$, s$
- Set cnn = CreateObject("ADODB.Connection")
- cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb" '连接数据库
- myPath = ThisWorkbook.Path & ""
- MyFile = ThisWorkbook.Path & "\Test.txt"
- If Dir(ThisWorkbook.Path & "\Test.txt") <> "" Then
- SQL = "Insert Into test select f1 as 号码,f2 as 批号,f3 as 日期,f4 as 时间,f5 as 备注 from [Text;FMT=TabDelimited;HDR=NO;DATABASE=" & myPath & ";].[Test.txt]"
- s = "[Test.txt]" & vbCrLf & "COLNAMEHEADER = false" & vbCrLf & "Format = TabDelimited" & vbCrLf & "Col1=f1 Char" & vbCrLf & "Col2=f2 Char" & vbCrLf & "Col3=f3 DATE" & vbCrLf & "Col4=f4 Char" & vbCrLf & "Col5=f5 Char"
- Open myPath & "schema.ini" For Output As #1
- Print #1, s
- Close #1
- cnn.Execute SQL
- Kill ThisWorkbook.Path & "\schema.ini"
- End If
- MsgBox "已经成功将文本文件数据保存为数据库!", vbInformation
- cnn.Close
- Set cnn = Nothing
复制代码
|
|