Укажите целевые столбцы при импорте (CSV для доступа) - PullRequest
1 голос
/ 13 октября 2011

Я узнал, как импортировать CSV в мою базу данных Access через другой вопрос .Но в ответе нет информации о том, как настроить таргетинг на определенные столбцы при импорте.Как я могу быть уверен, что правильные столбцы из CSV будут помещены в правильные столбцы в моей базе данных?

Мне нужно иметь возможность редактировать / добавлять значения столбцов по мере их импорта , используяклассический ASP .Примеры:

  • Четвёртый столбец в CSV - это идентификатор пользователя, мне нужно иметь возможность добавить «@ domain.com» в конец, когда он входит в базу данных для столбца электронной почты.
  • Шестой столбец является классификацией: если его значение равно «Учитель», тогда, когда оно импортируется, мне нужно изменить его на «Класс».

Я работаюс некоторым старым кодом и БД, которые я не создал.Поверьте, я бы использовал что-то еще, если бы мог, , поэтому не нужно делать пот-шоты для использования MS Access, пожалуйста.

Я думаю, все это сводится к этому:

  • , если ответ на предыдущий вопрос действительно позволяет мне рассматривать CSV так же, как таблицу БД, тогда как я могу выбратьстолбцы как в реальной таблице БД?

// Обновление:

Я все настроил так, как я считаю так и должно быть, но я получаю сообщение об ошибке:

ADODB.Recordset error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/datazone_bkup/Rollover/importTeachers.asp, line 12

строка 12: CSV.open "SELECT * FROM teachers.csv", conn

Мой полный код выглядит следующим образом:

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &_
             Server.MapPath("\path\to\file") & ";Extended Properties='text;HDR=no;FMT=Delimited';"

Set connCSV = Server.CreateObject("ADODB.Connection")
connCSV.Open strConn

Set CSV = Server.CreateObject("ADODB.recordset")
    CSV.open "SELECT * FROM teachers.csv", conn

    do until CSV.eof
        UserName = CSV.Fields(4)
        LastName = CSV.Fields(1)
        FirstName = CSV.Fields(2)
        MiddleName = CSV.Fields(3)
        School = CSV.Fields(5)
        if CSV.Fields(6) = "Teacher" then
            SecLevel = "Classroom"
        end if
        Active = "Yes"
        TeacherNumber = rsCSV.Fields(0)
        rsCSV.movenext

        sql = "INSERT INTO tblTeacher (UserName, LastName, FirstName, MiddleName, School, SecLevel, Active, TeacherNumber) " &_
                "VALUES (" &_
                    "'" & UserName & "','" & LastName & "','" & FirstName & "','" & MiddleName & "'," &_
                    "'" & School & "','" & SecLevel & "','" & Active & "','" & TeacherNumber & "'" &_
                ")"

        on error resume next
        conn.execute(sql)
    loop

@ HansUp , когда я пытался использовать ! как в rsDB!UserName я получил Syntax Error.Поэтому я вернулся к установке переменных для значений столбца CSV.

Опять же, спасибо за любую помощь.

1 Ответ

1 голос
/ 13 октября 2011

Как и в предыдущем вопросе, который вы связали, давайте предположим, что вы открыли набор записей ADO с содержимым CSV. Вы можете открыть второй набор записей ADO для таблицы назначения Access.

Если файл CSV содержит имена столбцов, вы можете циклически проходить по строкам набора записей и вставлять его значения в набор записей назначения. Если набор записей CSV - rsCSV, а набор записей для таблицы назначения - rsDB ...

Do While Not rsCSV.EOF
    rsDB.AddNew
    rsDB!userid = rsCSV!userid & "@domain.com"
    If rsCSV!classification = "Teacher" Then
        rsDB!classification = "Classroom"
    Else
        rsDB!classification = rsCSV!classification
    End If
    rsDB.Update
    rsCSV.MoveNext
Loop

Если в CSV нет имен столбцов, вы все равно можете это сделать, но для этого потребуется использовать порядковый номер поля в коллекции полей. Эти номера позиций начинаются с нуля, поэтому 3 для 4-го столбца и т. Д.

Do While Not rsCSV.EOF
    rsDB.AddNew
    rsDB!userid = rsCSV.Fields(3) & "@domain.com"
    If rsCSV.Fields(5) = "Teacher" Then
        rsDB!classification = "Classroom"
    Else
        rsDB!classification = rsCSV.Fields(5)
    End If
    rsDB.Update
    rsCSV.MoveNext
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...