Я ищу, чтобы автоматически обновить тип данных многочисленных полей в MS Access, как только я импортировал некоторые данные Excel в базу данных.

Почти все поля имеют Text поля, и это явно повлияет на любые запросы, которые основаны на данных date для правильной работы.

Примером может служить то, что для пары типов данных поля "Срок исполнения" задан text после импорта, тогда как я требую, чтобы они были установлены на date ; Я могу обновить каждый тип данных вручную, но хотел бы знать, возможно ли автоматизировать этот процесс, чтобы сэкономить время, так как я буду регулярно импортировать данные в эту базу данных.

Большое спасибо.

3 ответа3

1

Откройте таблицу в режиме конструктора и измените тип данных. Это изменит поле в таблице, а затем и все записи, хранящиеся там.

Помните, что формат, который вы выбираете в свойствах поля, может вызвать проблемы с отображением в зависимости от текущего формата данных. Если данные были согласованы при импорте и в нужном формате, все должно быть в порядке.

1

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

Sub AlterFieldStructure()

' this procedure changes the field size and field types (both text and number fields)
' in the "Rebuild Copy of Grade YYYY"  tables

Dim db As Database
Dim cn As New ADODB.Connection

Dim rs_fields As New ADODB.Recordset
Dim rs_yrtable As New ADODB.Recordset

Dim SQL As String
Dim fieldlist As String

Dim yr As Variant
Dim yrArr As Variant
Dim fld As Variant
Dim fldArr()

Dim i As Long
Dim j As Long

Dim ErrMsg As String

On Error GoTo Err
Set db = CurrentDb
Set cn = CurrentProject.Connection

' get list of fields to query the "Copy from Grade YYYY" tables
SQL = "SELECT FieldName, DataType, FieldSize  FROM GradeTableFields;"
rs_fields.Open SQL, cn
rs_fields.MoveFirst

i = 1
' Array for field name, datatype, and size
Do Until rs_fields.EOF = True
    If rs_fields!FieldName <> "ID" Then
        ReDim Preserve fldArr(1 To 3, 1 To i)
        fldArr(1, i) = rs_fields!FieldName
        fldArr(2, i) = rs_fields!DataType
        fldArr(3, i) = rs_fields!FieldSize
        fieldlist = fieldlist & rs_fields!FieldName & ", "
        i = i + 1
    End If
    rs_fields.MoveNext
Loop
j = i - 1
rs_fields.Close
Set rs_fields = Nothing
fieldlist = Left(fieldlist, Len(fieldlist) - 2)
yrArr = Array(2008, 2009, 2010, 2011, 2012)
For Each yr In yrArr
    ' for each field in field array
    For i = 1 To j
        SQL = "ALTER TABLE [Rebuild Copy of Grade " & yr & "] ALTER COLUMN " & _
               "[" & fldArr(1, i) & "] "
        If fldArr(2, i) = "Text" Then
            SQL = SQL & "Text(" & fldArr(3, i) & ");"
        ElseIf fldArr(2, i) = "Number" Then
            SQL = SQL & fldArr(3, i) & ";"
        Else
            MsgBox "DataType for " & fldArr(1, i) & " is not Text or Number", vbExclamation + vbOKOnly
            Exit Sub
        End If
        Debug.Print SQL
        db.Execute SQL, dbFailOnError
    Next i
Next yr
cn.Close
Set cn = Nothing
Set db = Nothing

Exit Sub
Err:
ErrMsg = "Error: " & Err.Number & "  " & "  " & Err.Description
Debug.Print ErrMsg
cn.Close
Set cn = Nothing
Set db = Nothing

End Sub
0

Я смог решить эту проблему сам и предоставлю лучшее объяснение, которое я могу:

Это была / была очень специфическая проблема, которая связана / связана с данными в моей электронной таблице; Некоторое время назад возникла проблема, которая заключалась в том, что первые заголовки строк / полей применялись некорректно, что приводило к числовому увеличению имен полей в моей базе данных. После некоторого исследования я узнал, как решить эту проблему, что привело к проблеме, с которой я обращаюсь к вам. Теперь я отменил предыдущее разрешение и внес много небольших изменений в свою электронную таблицу, и все снова стало хорошо.

Извинения за неспособность дать более информативное объяснение; Я уверен, что вы все понимаете, что это проблема, характерная для меня на индивидуальном уровне, и что, если бы я предоставил более подробное объяснение, это не имело бы смысла без предварительного знания контекста / фона. поддержать это.

Большое спасибо за ваши предложения - все полезные материалы были должным образом оценены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .