使用VBA Access 2007以编程方式更改字段类型

问题描述 投票:3回答:3

我有一个例程,导入Excel表,更改几个列(字段)名称,添加索引和几个新字段。但是,索引字段从Excel导入为Double,我想将其更改为Long。除了更改类型之外,此代码段均可使用:

Set tdf = db.TableDefs(TableName) ' Modify the new MBDA List table
For Each fld In tdf.Fields
    Select Case fld.Name ' Change the name of specific fields
        Case "MBDA Piece ID #"
            fld.Name = "MBDA Piece ID"
            fld.Type = dbLong ' change the type from Double to Long
        Case ">>Grade Level"
            fld.Name = "Grade"
        Case Else
    End Select
Next fld
NumFlds = i
vba ms-access-2007
3个回答
3
投票

表字段的一部分后,您无法更改表字段的类型。设置fld.Type仅在向表中添加新字段时有效。

您的代码可能会提供“错误3219:无效操作”?

但你可以使用DDL(数据定义语言)SQL,使用ALTER TABLE - ALTER COLUMN语句:

db.Execute "ALTER TABLE [MBDA List] ALTER COLUMN [MBDA Piece ID] LONG" 

编辑:这里是DDL数据类型名称与DAO常量(例如dbLong)的概述:http://allenbrowne.com/ser-49.html


0
投票

你可以试试这个

Sub AlterDataType()
   Dim strSQL As String
   strSQL = "ALTER TABLE [myTable] ALTER COLUMN myColumnDbl memo"
   DoCmd.RunSQL strSQL
End Sub

-1
投票
Sub vRunSetFieldType()

Call vSetFieldType("Reporting Period", "LONG")

End Sub

Sub vSetFieldType(strFld As String, strFldType As String)

Dim db As dao.Database
Dim tbl As TableDef
Dim fld As dao.Field
Dim strSQL As String

Set db = CurrentDb

For Each tbl In db.TableDefs
    If InStr(1, LCase(tbl.Name), "msys") = 0 Then
        For Each fld In tbl.Fields
            If LCase(fld.Name) = LCase(strFld) Then
                'Debug.Print tbl.Name & Chr(9) & fld.Name & Chr(9) & fld.Type
                strSQL = "ALTER TABLE [" & tbl.Name & "] ALTER COLUMN [" & fld.Name & "] " & strFldType & ";"
                Debug.Print strSQL
                db.Execute strSQL
            End If
        Next fld
    End If
Next tbl

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.