我在下面的VBA代碼中將許多文本文件關聯到Access表。但是,包含帶雙引號的文本的.TXT文件的情況存在問題,因此會使用空值打破此記錄的所有其他字段。在Access VBA中換掉雙引號 - INSERT INTO ... SELECT
我試圖在產品字段的選擇中放置替換功能,但不適用於雙引號。與其他字符,它的工作原理,但雙引號(不)...
你推薦哪些調整?任何建議,將不勝感激。
*注:實際數據超過100萬條記錄...
SCHEMA.INI
[Test_temp.csv]
ColNameHeader =假
格式=(;)分隔
COL1 = 「產品」 文本
col2的= 「價格」 雙
文本文件,CSV:test01.txt
電視SAMSUNG 21" 寬屏LED; 170
電視PHILIPS 27" 寬屏LED; 200
HD SEAGATE 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
它工作。但是代碼太慢了。想象一下,當使用100萬條記錄時。看到你建議的上面的代碼,它是讓它更快?爲什麼代碼很慢? –
@RalphMacLand:見編輯。對於100萬條記錄,對於我來說,只有兩個字段運行4.5秒,另外一個自動編號主鍵字段爲8秒。 – Andre
@RalphMacLand:P.S.你可以省略'FileCopy'並直接鏈接test * .txt文件。導入規格相對於schema.ini的另一個優勢。 ---除非文件位於網絡驅動器上,否則最好先將它們複製到本地磁盤。 – Andre