Office中国论坛/Access中国论坛

标题: 如何批量导入CSV文件到ACCESS [打印本页]

作者: 8868    时间: 2007-8-31 21:36
标题: 如何批量导入CSV文件到ACCESS
手中有成千上万个CSV格式的文件,如果通过手工方式导入到ACCESS中,势必要花很多时间.有没有谁知道可以批量导入CSV文件到ACCESS的代码?或者有没有谁知道将CSV文件批量转换成XLS文件的代码?(转换成XLS后就可以批量导入到ACCESS中了)
作者: Grant    时间: 2007-9-1 14:47
Public Function ReadCSVFile(ByVal strFilePath As String, ByVal strFileName As String)
Dim I As Integer
Dim intCount As Long

'打开数据链接关键
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

SQLcsv = "SELECT * FROM [" & strFileName & "]"
rs.Open SQLcsv
rs.Move (1)          '移动到指定记录
intCount = DCount("[ship]", "info", "[ship]='" & rs(16) & "'")      '获取表中记录重复数
If intCount > 1 Then  '进行判断

    Response = MsgBox("是否要覆盖原有[" & rs(16) & "],点是将更新所有[" & rs(16) & "]数据?", 4 + 32 + 256, "系统提示")
    If Response = vbNo Then   ' 当用户按下“否”。
       rs.Close
        conn.Close
         Set rs = Nothing
           Set conn = Nothing
                  Exit Function
    End If
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * from info where ship='" & rs(16) & "'"           '删除重复数据
    DoCmd.SetWarnings True
  End If
      Set conn1 = CurrentProject.Connection
    sql = "Select * From info "
    rs1.Open sql, conn1, 1, 3
Do Until rs.EOF   '循环更新数据表

   
    rs1.AddNew
    For I = 0 To 26
     rs1(I) = rs(I)
    Next
     
rs.MoveNext
Loop

rs1.UpdateBatch
rs1.Close
conn1.Close
Set rs1 = Nothing
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Function

自写的函数,楼主更改一下便可以批量导入csv文件了
作者: Henry D. Sy    时间: 2007-9-1 14:52
刚刚出炉的,楼主趁热吃吧!
作者: 8868    时间: 2007-9-1 16:05
版主的函数是不是将CSV文件导入到ACCESS后都自成一个表呢?我的意思是将现有的所有CSV文件的数据都导入到ACCESS的一个表中,然后再对表进行相关的数据操作.麻烦版主帮忙!
作者: Grant    时间: 2007-9-1 16:09
同理的,我只是把它函数化而已
作者: Victor_Duane    时间: 2007-9-1 17:09
GG,这个函数写成两个函数,是不是条理更加清晰一点也好理解一点啊
作者: 8868    时间: 2007-9-1 18:37
那么这个函数在窗体的控件中怎么调用呢?我很菜的,谢谢版主帮忙!
作者: Grant    时间: 2007-9-1 18:40
请上传你的示例说明文件我给你改改吧.这样也方便别人使用,现在这个函数只是我给一网友临时写的而已.
作者: 8868    时间: 2007-9-1 20:45
我做了一个示例,请版主帮忙填入代码,谢谢了!
作者: goto2008    时间: 2007-9-2 09:15
CSV格式是啥东东?
作者: 8868    时间: 2007-9-2 14:08
就是文本格式的东东.在EXCEL的另存为对话框中有该格式.还请版主Grant帮忙帮到底,谢谢!
作者: 8868    时间: 2007-9-2 20:40
本人还是没有搞定,麻烦好心人帮忙!
作者: Grant    时间: 2007-9-3 04:09
时间不是很充裕,只能晚上来弄了见谅

[attach]26108[/attach]
作者: Henry D. Sy    时间: 2007-9-3 08:12
夜猫子,都不用睡觉了。
作者: Grant    时间: 2007-9-3 08:54
错了,是小睡一下继续工作.
作者: 8868    时间: 2007-9-3 10:47
标题: 回复 #13 Grant 的帖子
非常感谢版主的帮忙,由衷的对你说一声谢谢!
作者: 8868    时间: 2007-9-3 16:18
还有一个问题想请教版主,为了防止重复导入数据,我在tbl出口名细中设置了三个主键。如果重复导入数据,系统会出现一般用户无法看懂的提示。在你写的函数中,加入什么样的代码后可以隐藏系统默认提示?(DoCmd.Setwarnings Flase好象不起作用)谢谢版主指教!
作者: Grant    时间: 2007-9-3 17:38
Do Until rs.EOF
    Set conn1 = CurrentProject.Connection
    sql = "Select * From tbl出口名细 where [VENDOR NO]='" & rs(0) & "'"
    rs1.Open sql, conn1, 1, 3

If rs1.RecordCount = 1 Then
表中有纪录
Else

rs1.AddNew
    For I = 0 To 7
      rs1(I + 1) = rs(I)
    Next

End If
rs.MoveNext
Loop
作者: Grant    时间: 2007-9-3 17:39
或者可用 Dcount 等方法来判断..
作者: 8868    时间: 2007-9-11 10:19
不好意思,又要麻烦版主了!用了你写的程序后,导入文件时,有三个字段始终导不进去(币制,单价,总价).请版主看看是怎么回事!谢谢!
作者: 8868    时间: 2007-9-11 15:38
麻烦斑竹帮忙看看!
作者: Grant    时间: 2007-9-11 16:14
主要是For I = 0 To 10 原来是 For I = 0 To 7 字段数量不同 而你有几个字段是必填,所以出现这个情况


下次认真看看即可.
作者: 8868    时间: 2007-9-12 08:35
谢谢版主的谆谆教导!
作者: 华哥哥    时间: 2008-2-11 22:26

作者: lixun005    时间: 2008-5-8 15:25
怎么不好下载啊
作者: yanlj518    时间: 2008-5-8 20:26
学习了
作者: hbwh2002    时间: 2008-7-25 11:36
谢谢了.正在找这东西呢
作者: taihung28    时间: 2008-12-15 12:47
谢谢楼主..
作者: dxy27    时间: 2008-12-16 14:02
高啊!学习喽

[ 本帖最后由 dxy27 于 2008-12-16 14:04 编辑 ]
作者: xxj0109    时间: 2009-3-17 09:41
还想就这个问题继续请教一下,如果我想每次仅选择待导入数据文件夹下的一个csv文件,并且不删除待导入文件,代码要如何更改呢?有没有人能再继续指点一下啊?
作者: xxj0109    时间: 2009-3-17 10:22
谢谢版主,看见答复了
作者: tangdao    时间: 2009-3-17 22:52
高手,学习中
作者: wwjing    时间: 2009-3-18 17:29
还可以这样,我要试一下呵呵!
作者: leolong    时间: 2009-4-1 17:54
这么复杂
作者: ndbs    时间: 2009-7-24 00:00
好实用的文章,谢谢
作者: qhp-soft    时间: 2009-7-24 00:28
Grant 兄真是牛呀
作者: djlin0519    时间: 2009-12-3 11:28
您好 刚认识就问您问题真不好意思, 我也是个菜的不能再菜的菜鸟,只是任务太急了,所以需要您的帮忙,我的情况和这个8868差不多,我手中也有成千上万个CSV格式的文件,现有的所有CSV文件的数据需要导入到ACCESS的一个表中,您能不能在帮他写的代码的基础上帮我也改改,顺便帮我说明这个函数在窗体的控件中怎么调用谢谢了 ,另外,您给他的代码压缩包有密码,能不能以后不加密,呵呵 22# Grant
作者: dlchenfeng    时间: 2011-2-16 22:34
学习了,很好的东西,明天上单位试试。
作者: dlchenfeng    时间: 2011-2-21 23:06
我也有个问题,如果每个CSV文件格式相同,都没有标题行的情况下,如果导入,我导入后的数据都是从第二行开始的.
不知道如何解决?
作者: dlchenfeng    时间: 2011-3-16 22:39
研究了好久,终于解决了。
作者: ttyu    时间: 2011-3-17 15:24
第一次接触
作者: ttyu    时间: 2011-3-17 15:25
学习致敬
作者: Lightsome    时间: 2011-3-21 09:12
正好需要这东西。。多谢...
作者: donghua613    时间: 2015-8-11 20:55
22楼附件加密了?
作者: ashengz86    时间: 2016-3-2 11:46
怎么有密码?密码是多少?




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3