MS Access 2003/2007 - Спецификация импорта для импорта данных из файла CSV, используемого в именах полей VBAvalidate?

У меня есть импорт, который я сделал с помощью мастера, по крайней мере, достаточно далеко, чтобы сохранить спецификацию. Он импортирует файлы CSV с заголовками, квалификаторами текста кавычек и разделенными запятыми. Затем я использую спецификацию импорта в некоторых vba, которые запускаются при нажатии кнопки.

Вот некоторые вещи, которые меня интересуют:

Итак, если поля в данных не в порядке, импорт не удастся? если данные не содержат всех полей, импорт завершится неудачно? если в данных есть лишние поля, импорт не удастся?

Итак, есть ли какая-либо проверка, которую я могу сделать для импортируемых данных, чтобы убедиться, что поля такие же, как в спецификации, они находятся в правильном порядке (если они должны быть) и т. Д.

Это работает очень хорошо, но я просто вижу, что если что-то в данных не соответствует норме, они все равно будут импортированы и все время отключатся.

Кроме того .... это не типичная настройка доступа ... это в основном для группы аналитиков данных, чтобы импортировать файлы в MDB ... с этим нет внешнего интерфейса.

спасибо Джастин


person Justin    schedule 21.10.2010    source источник
comment
Единственный способ, который я могу придумать, - это попытаться установить ссылку на электронную таблицу и проверить, соответствуют ли столбцы ожидаемым значениям, прежде чем запускать импорт. Если это не сработает, вы также можете автоматизировать Excel и получить эту информацию из Excel. Но все они кажутся более сложными, чем вы, вероятно, захотите. Я бы посоветовал перехватить ошибку и посоветовать людям отформатировать свои таблицы в соответствии с шаблоном.   -  person David-W-Fenton    schedule 21.10.2010


Ответы (2)


Вы можете проверить CSV-файл с помощью набора записей ADO.

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

Если эта строка подключения не работает для вас, см. Строки подключения для текстового файла

person HansUp    schedule 21.10.2010
comment
Для текстового источника данных вы указываете строку подключения, в которой можно найти исходные файлы. Итак, cstrFolder - это часть папки полного пути к моему файлу: C: \ Access \ webforums \ temp.csv - person HansUp; 21.10.2010

Я бы предоставил им защищенную таблицу в правильном формате. Защита гарантирует, что они не могут его изменить.

Предоставьте им отчет об ошибке, если / когда он не может быть импортирован.

person Craig T    schedule 21.10.2010