Office中国论坛/Access中国论坛

标题: 请教如何将数组里的数据导入到表里去?谢谢 [打印本页]

作者: wt565    时间: 2013-6-14 12:26
标题: 请教如何将数组里的数据导入到表里去?谢谢
我用VBA的代码如下,将TXT文档处理后赋值到一个二维数组orr

sub test()
FileName = Application.GetOpenFilename("txt,*.txt", , "select", , False)
   
    Open FileName For Input As #1
    aa = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
    Close #1
     ReDim orr(1 To UBound(aa), 1 To 20)
    m = 0
    For i = 5 To UBound(aa)
                If Len(Trim(aa(i))) < 50 Then GoTo L1
                If InStr(aa(i), "-------") > 0 Then GoTo L1
                If InStr(aa(i), "Custname") > 0 Then GoTo L1
                m = m + 1
                n = 1: orr(m, n) = Trim(Left(aa(i), 45))
                n = 2: orr(m, n) = Trim(Mid(aa(i), 46, 26))
                n = 3: orr(m, n) = Trim(Mid(aa(i), 73, 26))
                n = 4: orr(m, n) = Trim(Mid(aa(i), 100, 38))
                n = 5: orr(m, n) = Trim(Mid(aa(i), 139, 25))                    
                n = 0
L1:           Next

end sub

现在想把orr内的数据赋值到Access里建好的”表1“里去。请问代码应该怎么写呢?

谢谢
               


作者: t小宝    时间: 2013-6-14 16:05
使用ado记录集循环一条一条地添加
作者: wt565    时间: 2013-6-15 11:08
t小宝 发表于 2013-6-14 16:05
使用ado记录集循环一条一条地添加

谢谢版主关注。 对于access VBA我是新手,无法下手,能否给予ado记录循环的代码。我借此再继续摸索
?
作者: 竹笛    时间: 2013-6-15 14:15
Dim rst As ADODB.Recordset         定义ADO记录集

…….

Set rst = New ADODB.Recordset

    rst.CursorLocation = adUseClient

    rst.Open strSQL, CurrentProject.Connection, 2, 3

rst.MoveFirst    移动到第一条
while Not(rst.eof) and Not(rst.bof)
  ......
rst.moveNext
wend
rst.Close

Set rst = Nothing

作者: wt565    时间: 2013-6-17 11:53
竹笛 发表于 2013-6-15 14:15
Dim rst As ADODB.Recordset         定义ADO记录集

…….

谢谢关注

请教一下,先前我的代码已经将TXT处理好了,并赋值给了数组orr
请问,如何将数组orr插入到您的代码中去来实现添加记录呢?

再次谢谢
作者: 竹笛    时间: 2013-6-17 14:39
wt565 发表于 2013-6-17 11:53
谢谢关注

请教一下,先前我的代码已经将TXT处理好了,并赋值给了数组orr

Dim rst As ADODB.Recordset  定义ADO记录集

Dim strSQL As String     定义strsql,在下面要用到,具体用时,具体定义。

……….

Set rst = New ADODB.Recordset  

    rst.CursorLocation = adUseClient

    rst.Open strSQL, CurrentProject.Connection, 2, 3

rst.AddNew                            注:新增,修改为edit,删除为delete

……'rst(字段)=变量

rst.Update        注:新增与修改都需要更新记录集,删除与加载则不需要这句。

rst.Close

Set rst = Nothing

作者: wt565    时间: 2013-6-17 19:22
竹笛 发表于 2013-6-17 14:39
Dim rst As ADODB.Recordset  定义ADO记录集

Dim strSQL As String     定义strsql,在下面要用到,具 ...

非常感谢。

要好好揣摩揣摩才行。
作者: 竹笛    时间: 2013-6-18 16:20
wt565 发表于 2013-6-17 19:22
非常感谢。

要好好揣摩揣摩才行。

呵呵 明白了就简单了
作者: wt565    时间: 2013-6-21 16:33
竹笛 发表于 2013-6-18 16:20
呵呵 明白了就简单了

老师,恕我愚钝。 没有能弄明白。

能否请您看看我下面的数据库?


作者: wt565    时间: 2013-6-21 16:48
附件里是我的数据库和待导入的TXT文件
表PI1已经建好了。
窗体里有一个按键。希望按下按钮就可以执行TXT文件处理和导入。
代码在窗体下面
作者: 竹笛    时间: 2013-6-22 12:37
wt565 发表于 2013-6-21 16:48
附件里是我的数据库和待导入的TXT文件
表PI1已经建好了。
窗体里有一个按键。希望按下按钮就可以执行TXT ...

如果你是襄樊直接导入的话就不能用我上面的方法了
作者: wt565    时间: 2013-6-22 13:03
本帖最后由 wt565 于 2013-6-22 13:05 编辑
竹笛 发表于 2013-6-22 12:37
如果你是襄樊直接导入的话就不能用我上面的方法了

我的TXT不能直接导入表,因为TXT的数据列是按宽度定位的,而且还有一些多余的表头等要删除。所以我只好把TXT的有效数据赋值到一个二维数组。然后在将这个二维数组导入到表里。之后怎么导入到Access的表里就不知道怎么搞了。
作者: wt565    时间: 2013-6-22 13:06
而且这句 FileName = Application.GetOpenFilename("txt,*.txt", , "select", , False) 在ExcelVBA里可以运行,在ACCESS VBA里运行似乎也有问题
作者: cgsilicone    时间: 2013-6-22 14:13
本帖最后由 cgsilicone 于 2013-6-22 14:18 编辑
wt565 发表于 2013-6-22 13:06
而且这句 FileName = Application.GetOpenFilename("txt,*.txt", , "select", , False) 在ExcelVBA里可以运 ...

GetOpenFilename是VBE(VB FOR EXCEL) 提供的函数,在ACCESS中不能使用。
下面提供一种使用EXCEL中功能的好办法:
Set EXCEL的功能 = CreateObject("EXCEL.Application")
EXCEL的功能.Visible = True
FileName = EXCEL的功能.GetOpenFilename("txt,*.txt", , "select", , False)
EXCEL的功能.Quit
作者: cgsilicone    时间: 2013-6-22 14:54
本帖最后由 cgsilicone 于 2013-6-22 15:31 编辑

你的附件我的版本打不开。不用很复杂的知识,你的代码略微修改,直接就存入数据库中了(不需要二维数组),代码如(经测试有效)下:

Private Sub Command0_Click()


Set EXCEL的功能 = CreateObject("EXCEL.Application")
EXCEL的功能.Visible = True
FileName = EXCEL的功能.GetOpenFilename("txt,*.txt", , "select", , False)
EXCEL的功能.Quit

Set 数据表 = CurrentDb.OpenRecordset("表1", dbOpenDynaset)

Open FileName For Input As #1
aa = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
Close #1
m = 0
For i = 5+1 To UBound(aa)
        If Len(Trim(aa(i))) < 50 Then GoTo L1
        If InStr(aa(i), "-------") > 0 Then GoTo L1
        If InStr(aa(i), "Custname") > 0 Then GoTo L1

         数据表.AddNew
         数据表.Fields(0) = Trim(Left(aa(i), 45))
         数据表.Fields(1) = Trim(Mid(aa(i), 46, 26))
         数据表.Fields(2) = Trim(Mid(aa(i), 73, 26))
         数据表.Fields(3) = Trim(Mid(aa(i), 100, 38))
         数据表.Fields(4) = Trim(Mid(aa(i), 139, 25))
         数据表.Update
         m = m + 1
L1:  Next

数据表.Close
Set 数据表 = Nothing

MsgBox "导入数据成功,共导入" & m & "条"

End Sub






作者: wt565    时间: 2013-6-22 16:54
本帖最后由 wt565 于 2013-6-22 17:33 编辑
cgsilicone 发表于 2013-6-22 14:54
你的附件我的版本打不开。不用很复杂的知识,你的代码略微修改,直接就存入数据库中了(不需要二维数组), ...

多谢达人指点。 经过调试,成功了。
你太伟大了!!!终于可以使用了。





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