2017-05-09 35 views
0

我試圖導入從我開發的Web窗體創建的CSV文件。當表單提交時,它會在我的CSV中創建一條包含衆多客戶信息的記錄。使用表單按鈕將CSV導入到MS-Access,混淆錯誤

按照我需要把它變成一個CSV,然後分別把它導入Access數據庫供他人使用(用於服務器的安全性需要兩個步驟)的要求。

我試圖做到這一點是有一個簡單的表格裏面訪問就可以了按鈕的方式,簡單地說,進口,每當用戶需要它,這將拉動CSV的更新。

我的錯誤是混淆了我,因爲它是陳述

「字段‘1’不存在於目標表‘應用程序’」

我沒有在我的CSV標記F1領域,甚至包含'F1'的任何記錄,並且我的訪問表應用程序(顯然)中沒有名爲F1的字段。

以下是訪問我的VB模塊的代碼

Option Compare Database 

    Sub ImportingCSV() 
    Function Import() 
    On Error GoTo Macro1_Err 


    DoCmd.TransferText acImportDelim, "", "Applications", "C:\Users\ALee\Documents\formTesting22.csv", False, "" 


     Import: 
     Exit Function 
     Macro1_Err: 
     MsgBox Error$ 
     Resume Macro1_Exit 

    End Function 

這裏是我的CSV文件格式(你的可讀性隔開)

OPUCN#WVQNAJT4PD, 
    2017.05.03, 
    test, 
    v, 
    90545452929, 
    4062033985, 
    No, 
    [email protected], 
    10003937683827, 
    test, 
    test, 
    689 395 3967, 
    2048 2983999, 
    No,[email protected], 
    111 e Streeth south, 
    12, 
    Temporary, 
    Commercial, 
    100, 
    200, 
    300, 
    208/120V, 
    Three-Phase, 
    Underground (UG), 
    Ganged Position*, 
    23, 
    "dsbsdhfbslhfbshfbsdhlfbgshdfgsfslfgljshgfljshgfljshgflsj" 

錯誤是告訴我,領域對於第二個電話號碼(CSV中的「4062033985」)在表格應用程序中沒有字段,但它確實! CSV中的「F1」爲客戶手機。當我通過Access的導入嚮導手動導入時,這工作正常。

Application Table Format

希望有人可以點我在正確的方向,不熟悉的訪問VB腳本或宏。

+0

@Plutonix阿BUG擊敗了我,道歉。 –

+0

您是否嘗試從您的:「DoCmd.TransferText acImportDelim,」應用程序「,」C:\ Users \ ALee \ Documents \ formTesting22.csv「,False中刪除」「?我正在查看一些舊的傳輸內容,並且從未放置任何「」佔位符。那裏的其他一切看起來都不錯。 – geeFlo

回答

1

請勿導入文件。

鏈接 csv文件作爲表。然後創建一個查詢來讀取和轉換(淨化)數據。

使用該查詢作爲源像數據附加到其它表的時間的進一步處理。

+0

這會使我的數據庫面臨安全威脅嗎?我只是試圖通過兩個步驟(表單 - > CSV,然後CSV - >數據庫)來捕獲數據,因爲我的僱主要求我這樣做,因此沒有從Web表單用戶直接鏈接到擁有其他人提交信息的數據庫。他們可能有一個鏈接的CSV只保存數據的價值幾天的提交,所以如果它被破壞(以某種方式),影響將是最小的。 –

+0

這與現在沒有什麼不同。用「transfer-link-runquery」替換「transfer-import」方法。區別在於,在查詢中您可以控制字段名稱,可以排除無效數據,並可以將一些或多個字段轉換爲適合接收表的字段。 – Gustav

+0

我創建了一個鏈接並創建了它創建的表。但現在我面臨一個問題,那就是:如果客戶要提交Web表單應用程序,而員工打開數據庫,則不會將提交內容附加到CSV或數據庫。由於數據庫之間的鏈接保持打開CSV,所以新記錄丟失。我試圖圍繞如何避免這種情況,我想可能是一箇中介數據庫?一個是直接鏈接到CSV,另一個是我們的員工查看數據?我不確定這是否會造成同樣的問題。 –

0

CSV文件是一個電子表格...嘗試...

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml,[YourDestinationTable],"C:\YourFileDirectoryPath, filename, and extension",true,[Spreadsheet name if multiple sheet names] 
0

有各種各樣的方式做這樣的事情。這當然是最簡單的方法。

Private Sub Command0_Click() 

DoCmd.TransferText acImportDelim, "", "Book1", "C:\your_path_here\Book1.csv", True, "" 

End Sub 

假設您想要將幾個CSV文件(所有相同類型)導入到同一個表中。只需運行下面的腳本。

Option Compare Database 
Option Explicit 

Private Sub Command0_Click() 
    DoImport 
End Sub 


Function DoImport() 

Dim strPathFile As String 
Dim strFile As String 
Dim strPath As String 
Dim strTable As String 
Dim blnHasFieldNames As Boolean 

' Change this next line to True if the first row in CSV worksheet 
' has field names 
blnHasFieldNames = True 

' Replace C:\Documents\ with the real path to the folder that 
' contains the CSV files 
strPath = "C:\your_path_here\" 

' Replace tablename with the real name of the table into which 
' the data are to be imported 

strFile = Dir(strPath & "*.csv") 


Do While Len(strFile) > 0 
     strTable = Left(strFile, Len(strFile) - 4) 
     strPathFile = strPath & strFile 
     DoCmd.TransferText acImportDelim, , strTable, strPathFile, blnHasFieldNames 


' Uncomment out the next code step if you want to delete the 
' EXCEL file after it's been imported 
'  Kill strPathFile 

     strFile = Dir() 

Loop 


End Function 

你也可以做各種其他的瘦身;使用msoFileDialogFilePicker導航到文件;您可以遍歷記錄集並逐個將它們加載到表中。正如Gustav所建議的那樣,您可以鏈接到您的文件(staging)並將記錄寫入表(生產)。你應該嘗試所有這些方法,並玩弄