【发布时间】:2015-12-24 13:55:33
【问题描述】:
我在下面拥有 VBA 代码,这对 Access 表有很多文本文件。但是对于包含带双引号的文本的 .TXT 文件的情况,会出现问题,因此会使用空值打破该记录的所有其他字段。
我尝试在产品字段的选择中放置替换功能,但对双引号不起作用。与其他字符一起使用,但双引号(否)...
您建议进行哪些调整?任何建议将不胜感激。
*注:实际数据超过100万条记录...
SCHEMA.INI
[Test_temp.csv]
ColNameHeader=false
格式=分隔(;)
Col1="产品" 文本
Col2="price" 双倍
文本文件 CSV:test01.txt
电视 三星 21" 宽屏 LED;170
电视飞利浦 27" 宽屏 LED;200
高清希捷 1TB 7200RPM;150
代码 VBA 访问:
Sub TableImport()
Dim strSQL As String
Dim db As DAO.Database
Dim strFolder As String
strFolder = CurrentProject.Path
Set db = CurrentDb
strSQL = "DELETE FROM tbTest"
db.Execute strSQL, dbFailOnError
Dim strFile As String
strFile = Dir(strFolder & "\test*.txt", vbNormal)
Do Until strFile = ""
FileCopy strFolder & "\" & strFile, strFolder & "\Test_temp.csv"
strSQL = ""
strSQL = " INSERT INTO tbTEST(product,price)"
strSQL = strSQL & " SELECT fncReplace(product),price"
strSQL = strSQL & " FROM [Text;HDR=no;FMT=Delimited;DATABASE=" & strFolder & "].Test_temp.csv"
db.Execute strSQL, dbFailOnError
strFile = Dir
Loop
db.Close
End Sub
Public Function fncReplace(varStr As Variant) As String
If IsNull(varStr) Then
fncReplace = ""
Else
fncReplace = Replace(Trim(varStr), """", "''")
End If
End Function
更新 - 成功了 - 建议:Andre451
Sub TableImport()
Dim strSQL As String
Dim db As DAO.Database
Dim strFolder As String
strFolder = CurrentProject.Path
Set db = CurrentDb
strSQL = "DELETE FROM tbTest"
db.Execute strSQL, dbFailOnError
Dim strFile As String
strFile = Dir(strFolder & "\test*.txt", vbNormal)
Do Until strFile = ""
FileCopy strFolder & "\" & strFile, strFolder & "\Test_temp.csv"
DoCmd.TransferText acLinkDelim, "specIMPORTAR", "linkData", strFolder & "\Test_temp.csv", False
strSQL = ""
strSQL = " INSERT INTO tbTEST(product,price)"
strSQL = strSQL & " SELECT product,price"
strSQL = strSQL & " FROM linkData"
db.Execute strSQL, dbFailOnError
strFile = Dir
DoCmd.DeleteObject acTable, "linkData"
Loop
db.Close
End Sub
【问题讨论】: