MS Access - 导入后自动更新数据类型

MS Access - 导入后自动更新数据类型

我希望在将一些 Excel 数据导入数据库后自动更新 MS Access 中许多字段的数据类型。

几乎所有字段都设置为Text字段,这显然会影响任何依赖date数据才能准确运行的查询。

举个例子,几个“截止日期”字段的数据类型被设置为text导入后,而我要求将它们设置为date;我可以手动更新每种数据类型,但我想知道是否可以自动化这个过程以节省时间,因为我将定期将数据导入这个数据库。

非常感谢。

答案1

在设计视图中打开表并更改数据类型。这将更改表中的字段,从而更改存储在那里的所有记录。

请记住,您在字段属性中选择的格式可能会导致显示问题,具体取决于数据的当前格式。如果数据在导入时一致,并且格式符合您的要求,则应该没问题。

答案2

下面是我编写的一些代码,用于更改必须作为所有文本字段导入的 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

答案3

我已经设法自己解决了这个问题,并将尽我所能提供最好的解释:

这是一个与我的电子表格中的数据相关的非常具体的问题;前段时间出现了一个问题,第一行/字段标题应用不正确,导致我的数据库中的字段名称以数字形式递增。经过一番研究,我找到了一种解决这个问题的方法,然后就出现了我向您提出的问题。现在,我放弃了之前的解决办法,对我的电子表格进行了许多小的调整,一切似乎又恢复正常了。

抱歉,我无法提供更具信息量的解释;我相信你们都能理解,这是我个人特有的问题,如果我要提供更详细的解释,那么在没有任何相关背景知识支撑的情况下,解释就没有意义。

非常感谢您的建议——所有有用的贡献都已得到适当投票。

相关内容