为什么DoCmd.transfertext acExport工作并使用Current.Db.OpenRecordset导出不?

时间:2014-06-11 18:37:46

标签: vba import access-vba export-to-csv recordset

我创建了两种方法将文本文件导入到表中,并从表导出到csv文件。第一种方法很好。进出口没有故障。第二种方法运行,但输出文件没有记录。对于第二种方法,如果我在DoCmd.Transfer ac之后使用暂停功能5秒,则第二种方法产生与第一种方法相同的结果。为什么我需要暂停功能?为什么第一种方法不需要在导入/导出之间暂停?我目前正在使用第二种方法和暂停功能,这使我在需要更新输出时更具灵活性。 (代码已被截断)

第一种方法

Dim FileDate As String
FileDate = Format(WhatwasPriorBusinessDay(Date), "mmddyy")

DoCmd.TransferText acImportFixed, "GLTransImportSpecs", "tbl_gltrans", "G:\Home\RiskMgtReports\AutoDatabase\GL Export Files\dv24gltrans " & FileDate & ".txt", False

DoCmd.TransferText acExportDelim, "GLTransExportSpecs", "qry_union_90_20", "G:\Home\RiskMgtReports\AutoDatabase\GL Export Files\Indirect_Auto_" & FileDate & ".csv", False

第二种方法

Dim db                          As DAO.Database
Dim rs                          As DAO.Recordset
Dim strQuery                    As String
Dim strDataSource               As String
Dim arGLStuff(5000, 13)         As String
Dim FileDate                    As String
Dim SumDebit                    As Currency
Dim SumCredit                   As Currency
Dim tempDate                    As String
Dim textExcelFile               As String

DoCmd.TransferText acImportFixed, "GLTransImportSpecs", "tbl_gltrans", "G:\Home\RiskMgtReports\AutoDatabase\GL Export Files\dv24gltrans " & FileDate & ".txt", False
Pause (5)

Set db = CurrentDb

strQuery = "SELECT * From tbl_gltrans where debits > 0"

Set rs = CurrentDb.OpenRecordset(strQuery)

glImportRecs = -1
SumDebits = 0
If rs.EOF Then
    Else
        With rs
            .MoveFirst
            While Not .EOF
        arGLStuff(glImportRecs, 0) = "135"
        arGLStuff(glImportRecs, 1) = !GLAccount
        arGLStuff(glImportRecs, 3) = "000"
        arGLStuff(glImportRecs, 4) = "90"
        arGLStuff(glImportRecs, 5) = Str(Abs(!Debits))
        arGLStuff(glImportRecs, 6) = "Tran Code " & !Transcode
        If !Level3 = "XX" Then
            arGLStuff(glImportRecs, 7) = "REGION MA" 'column H
        Else
            arGLStuff(glImportRecs, 7) = "REGION " & !Level3 'column H
        End If
        arGLStuff(glImportRecs, 8) = ""
        arGLStuff(glImportRecs, 9) = ""
        arGLStuff(glImportRecs, 10) = ""
        tempDate = Format(CDate(Format(!ProcessYMD, "00-00-00")), "mmddyy")
        arGLStuff(glImportRecs, 11) = tempDate
        arGLStuff(glImportRecs, 12) = ""
            .MoveNext
            Wend
        End With
End If

Set rs = Nothing

strQuery = "SELECT * From tbl_gltrans where credits < 0"

Set rs = CurrentDb.OpenRecordset(strQuery)
SumCredits = 0
If rs.EOF Then
Else
    With rs
        .MoveFirst
        While Not .EOF
        arGLStuff(glImportRecs, 0) = "135"
        arGLStuff(glImportRecs, 1) = !GLAccount
        arGLStuff(glImportRecs, 3) = "000"
        arGLStuff(glImportRecs, 4) = "90"
        arGLStuff(glImportRecs, 5) = Str(Abs(!Credits))
        arGLStuff(glImportRecs, 6) = "Tran Code " & !Transcode
        If !Level3 = "XX" Then
            arGLStuff(glImportRecs, 7) = "REGION MA" 'column H
        Else
            arGLStuff(glImportRecs, 7) = "REGION " & !Level3 'column H
        End If
        arGLStuff(glImportRecs, 8) = ""
        arGLStuff(glImportRecs, 9) = ""
        arGLStuff(glImportRecs, 10) = ""
        tempDate = Format(CDate(Format(!ProcessYMD, "00-00-00")), "mmddyy")
        arGLStuff(glImportRecs, 11) = tempDate
        arGLStuff(glImportRecs, 12) = ""
       .MoveNext
       Wend
    End With
End If

Set rs = Nothing

Set db = Nothing

下一步将其导出到csv文件。

1 个答案:

答案 0 :(得分:3)

编辑:我第一次回答Do..Loop与DCount等待插入的记录是不正确的。事实证明,它是:

DBEngine.Idle dbRefreshCache
在执行该技巧的TransferText命令之后