设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3010|回复: 4
打印 上一主题 下一主题

[ADO/DAO] 关于主页上“批量导入CSV(Txt)”发现的问题

[复制链接]
跳转到指定楼层
1#
发表于 2014-2-5 14:21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
40金钱
测试主页上的批量导入范例(详见 http://www.office-cn.net/accesssrc/20140128/8419.html)时发现了一个问题:当导入的源数据分隔符不是逗号(,)时就会出错,如果我的分隔是其他符号,例如(|),如何修改代码。

求高手解答。

最佳答案

查看完整内容

两个办法: 1. 自己写一个Schema.ini, 放在CSV目录下, 为每个CSV文件写下如下内容: [009876N.csv] Format=Delimited(|) ColNameHeader=True MaxScanRows=0 CharacterSet=ANSI 2.在读取CSV时, 将字符串用SPLIT(txt,"|")的方法将字符串转成单个值, 再写入数据表. Option Compare Database Public conn As New ADODB.Connection 'ADO Public rs As New ADODB.Recordset Public rs1 As New ADODB.Recordset Publ ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2014-2-5 14:21:12 | 只看该作者
本帖最后由 Benjamin_luk 于 2014-2-13 09:56 编辑

两个办法:
1. 自己写一个Schema.ini, 放在CSV目录下, 为每个CSV文件写下如下内容:
[009876N.csv]
Format=Delimited(|)
ColNameHeader=True
MaxScanRows=0
CharacterSet=ANSI

2.在读取CSV时, 将字符串用SPLIT(txt,"|")的方法将字符串转成单个值, 再写入数据表.
Option Compare Database
Public conn As New ADODB.Connection          'ADO
Public rs As New ADODB.Recordset
Public rs1 As New ADODB.Recordset
Public Function ReadCSVFile(ByVal strFilePath As String, ByVal strFileName As String)
    Dim i As Integer, a
    '===============================================================================
    '-函数名称:         ReadCSVFile
    '-功能描述:         导入csv文件
    '-输入参数说明:     参数1:strFilePath As String 目标路径
    '                   参数2:strFileName As String 文件名称
    '-使用语法示例:     ReadCSVFile("路径","文件名")
    '-参考:
    '-使用注意:
    '-兼容性:           2000,XP,2003
    '-作者:             Grant
    '-联系方式:         QQ:20991943  Email:20991943@qq.com
    '-更新日期:        2007-09-3
    '===============================================================================

    conn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
              "DBQ=" & strFilePath & ";Extensions=asc,csv,tab,txtersist Security Info=False"   '打开数据链接关键
    With rs
        .CursorType = 2
        .LockType = 3
        .CursorLocation = 3
        .ActiveConnection = conn
    End With

    Set conn = CurrentProject.Connection

    sqlcsv = "SELECT * FROM [" & strFileName & "]"
    rs.Open sqlcsv
    rs.Move (0)         '移动到指定记录

    sql = "Select * From tbl_Export"
    rs1.Open sql, conn, 1, 3

    Do Until rs.EOF
    a = Split(rs(0), "|")
        rs1.AddNew
        For i = 0 To 7
            rs1(i + 1) = a(i)
        Next
        rs.MoveNext
    Loop

    rs1.UpdateBatch
    rs1.Close
    rs.Close
    conn.Close
    Set rs = Nothing
    Set rs1 = Nothing
    Set conn = Nothing
End Function
回复

使用道具 举报

点击这里给我发消息

3#
发表于 2014-2-5 14:33:58 | 只看该作者
access系统 自带的导入功能 有设置分隔符的功能
回复

使用道具 举报

4#
 楼主| 发表于 2014-2-5 14:49:52 | 只看该作者
版主,我问的问题是批量导入啊,手动导入当然是可以设置自定义分隔符的。
例子首页上有了,所以没发。
链接中的示例适用的是标准CSV文件分隔符“逗号”。现在许多数据中含逗号,所以用了别的分隔符,例如“|”,“/”等,如何在代码中自定义?
回复

使用道具 举报

5#
 楼主| 发表于 2014-2-19 08:59:14 | 只看该作者
多谢高手耐心解答 !! 用 Schema.ini 方法完美解决了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-30 03:22 , Processed in 0.100783 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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