2017-05-09 36 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)并将记录写入表(生产)。你应该尝试所有这些方法,并玩弄