ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: mctrix

[已解决] Excel中使用VBA将txt导入Access

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-26 12:19 | 显示全部楼层
mctrix 发表于 2016-1-26 08:36
我做了两次实验:
1. 把删除schema.ini那部分代码删除掉 --> 看到了向ini中写入的内容;
2. 把操作sche ...

如果没有schema.ini,ADO默认文本文件是用逗号分隔的,如果有schema.ini,ADO就按照它指定的分隔符,是否有标题行等进行查询

你提供的文本文件是用制表符分割的,且没有标题行,必须在SQL语句执行时读取schema.ini中的信息

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-26 12:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2016-1-26 12:19
如果没有schema.ini,ADO默认文本文件是用逗号分隔的,如果有schema.ini,ADO就按照它指定的分隔符,是否 ...
  1. SQL = "Insert Into test select f1 as 号码,f2 as 批号,f3 as 日期,f4 as 时间,f5 as 备注 from [Text;FMT=TabDelimited;HDR=NO;DATABASE=" & myPath & ";].[" & MyFile & "]"
复制代码


那SQL中" [Text;FMT=TabDelimited;HDR=NO;DATABASE=" & myPath & ";].[" & MyFile & "]",对Text文本格式的限定(FMT、HDR)不起作用吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-26 13:12 | 显示全部楼层
zhaogang1960 发表于 2016-1-26 12:19
如果没有schema.ini,ADO默认文本文件是用逗号分隔的,如果有schema.ini,ADO就按照它指定的分隔符,是否 ...

抱歉,又遇到一个错误。当txt文本”号码“字段记录末尾带字母是,导入Access会丢失。请帮忙看下!
问题.jpg

导入不全问题.zip (1.42 MB, 下载次数: 33)

TA的精华主题

TA的得分主题

发表于 2016-1-26 13:16 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-26 13:36 | 显示全部楼层
魂断蓝桥 发表于 2016-1-26 13:16
试一下,把access 号码字段设置成文本

谢谢。我设置过了,是短文本型字段

文本型.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-26 15:36 | 显示全部楼层
在Access中使用”外部数据 -- 文本文件“方式手动导入数据,发现又不会丢失数据。搞不明白怎么回事?

常规导入.jpg

TA的精华主题

TA的得分主题

发表于 2016-1-26 15:38 | 显示全部楼层
mctrix 发表于 2016-1-26 15:36
在Access中使用”外部数据 -- 文本文件“方式手动导入数据,发现又不会丢失数据。搞不明白怎么回事?

文本文件第一列数字和文本混排,需要指定各列数据类型:
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

TA的精华主题

TA的得分主题

发表于 2016-1-26 15:41 | 显示全部楼层
Schema.ini文件中指定各列数据类型,请看附件
导入不全问题.rar (1.2 MB, 下载次数: 99)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-1-26 15:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mctrix 发表于 2016-1-26 12:27
那SQL中" [Text;FMT=TabDelimited;HDR=NO;DATABASE=" & myPath & ";].[" & MyFile & "]" ...

用逗号分割的文本文件作为数据源是起作用的,否则全部需要读取Schema.ini文件中的设置

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-26 15:57 | 显示全部楼层
zhaogang1960 发表于 2016-1-26 15:41
Schema.ini文件中指定各列数据类型,请看附件

非常感谢。
是不是所有文本型格式的文件,都可以使用这种ADODB读取Schema.ini+执行SQL的方式来把数据导入Access?
还有,类比到其他格式的文件(Excel、Access等)导入到Access,也可使用同样的方式吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-7-1 15:28 , Processed in 0.046530 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表