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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 21 октября 2010

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

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

1 голос
/ 21 октября 2010

Вы можете проверить файл 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

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

...