我创建了两种方法将文本文件导入到表中,并从表导出到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文件。
答案 0 :(得分:3)
编辑:我第一次回答Do..Loop与DCount等待插入的记录是不正确的。事实证明,它是:
DBEngine.Idle dbRefreshCache
在执行该技巧的TransferText命令之后。