【问题标题】:MS Access 2003/2007 - Import Specification for data import from csv file used in VBA.....validate field names?MS Access 2003/2007 - 从 VBA 中使用的 csv 文件导入数据的导入规范.....验证字段名称?
【发布时间】:2011-04-28 09:11:25
【问题描述】:

我有一个使用向导进行的导入,至少足以保存规范。它导入带有标题、引用文本限定符和逗号分隔的 CSV 文件。然后我在一些从按钮单击事件触发的 vba 中使用导入规范。

以下是我想知道的一些事情:

如果数据中的字段乱序导入会失败?如果数据不包含导入失败的所有字段?如果数据中有额外的字段导入失败?

那么我可以对导入的数据进行任何类型的验证,以确保字段与规范相同,它们的顺序正确(如果需要的话)等等。

这很好用,但我只是看到,如果数据中的某些内容不正常,它无论如何都会导入,并把整个时间都扔掉。

另外....这不是典型的访问设置...这主要是供数据分析师团队将文件导入 mdb...没有前端。

谢谢 贾斯汀

【问题讨论】:

  • 我能想到的唯一方法是尝试链接到电子表格并在运行导入之前检查列是否符合您的预期。如果这不起作用,您还可以自动化 Excel 并从 Excel 获取此信息。但这些听起来都比你想要的更复杂。我会说捕获错误并告诉人们格式化他们的电子表格以匹配模板。

标签: ms-access vba csv import ms-access-2003


【解决方案1】:

您可以使用 ADO 记录集检查 CSV 文件。

Public Sub InspectCsvFile()
    Const cstrFolder As String = "C:\Access\webforums"
    Const cstrFile As String = "temp.csv"
    Dim i As Integer
    Dim strConnect As String
    Dim strSql As String

    'early binding requires reference, Microsoft ActiveX Data Object Library '
    'Dim cn As ADODB.Connection '
    'Dim rs As ADODB.Recordset '
    'Dim fld As ADODB.Field '
    'Set cn = New ADODB.Connection '
    'Set rs = New ADODB.Recordset '

    'late binding; no reference needed '
    Dim cn As Object
    Dim rs As Object
    Dim fld As Object
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
        cstrFolder & ";Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
    'Debug.Print strConnect '
    cn.Open strConnect
    strSql = "SELECT * FROM " & cstrFile & ";"
    rs.Open strSql, cn
    Debug.Print "Fields.Count: " & rs.Fields.Count
    For i = 0 To rs.Fields.Count - 1
        Set fld = rs.Fields(i)
        Debug.Print i + 1, fld.Name, fld.Type
    Next i
    Set fld = Nothing
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

如果该连接字符串不适合您,请参阅Connection strings for Textfile

【讨论】:

  • 对于文本数据源,将连接字符串指向可以找到源文件的位置。所以 cstrFolder 是我的文件完整路径的文件夹部分:C:\Access\webforums\temp.csv
【解决方案2】:

我会向他们提供格式正确的受​​保护电子表格。保护确保他们无法更改它。

在导入失败时向他们提供错误报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多