我有一个例程,导入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
表字段的一部分后,您无法更改表字段的类型。设置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
你可以试试这个
Sub AlterDataType()
Dim strSQL As String
strSQL = "ALTER TABLE [myTable] ALTER COLUMN myColumnDbl memo"
DoCmd.RunSQL strSQL
End Sub
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