Alter Table 在 MS Access 64 位下不起作用。为啥?
Posted
技术标签:
【中文标题】Alter Table 在 MS Access 64 位下不起作用。为啥?【英文标题】:Alter Table doesn't work under MS Access 64 bit. Why?Alter Table 在 MS Access 64 位下不起作用。为什么? 【发布时间】:2011-09-14 02:18:45 【问题描述】:我正在尝试编写一个简单的函数来调整 Windows 7 下 MS Access 64 位版本中的文本字段的大小。它失败并出现错误 3420、对象无效或不再设置。为什么是这样?您不能在 MS Access 64 位版本下再更改代码中的表吗?
代码如下:
Private Function ResizeSingleTextField(sTableName As String, _
sFieldName As String, _
iLength As Integer)
ResizeSingleTextField = False
Dim sSQL As String
sSQL = "ALTER TABLE " & sTableName & " " _
& "ALTER COLUMN " & sFieldName & " " _
& "TEXT (" & iLength & ")"
CurrentDb.Execute (sSQL)
ResizeSingleTextField = True
Exit Function
End Function
Public Sub TestIt()
Dim result As Boolean
result = ResizeSingleTextField("GregTest", "MyTextField", 12)
Debug.Print result
End Sub
【问题讨论】:
它在哪一行抛出错误? 它在 CurrentDb.Execute(sSQL) 行上失败。请参阅下面的其他评论。 看起来这是一个实际的错误(因为它有一个修补程序),但你的代码让我很困扰。我不会使用 CurrentDB,而是将数据库对象分配给一个变量,并从中执行(这保证了持久性,而使用 CurrentDB 意味着返回的数据库对象存在于该单行上;在这里不应该相关,但我会仍然这样做)。此外,如果没有dbFailOnError
开关和错误处理程序,您永远都不应该使用所有 CurrentDB.Execute。
戴夫,感谢您的建议。
【参考方案1】:
这是该版本的 Access 中的一个已知错误。请参阅 MS 知识库 Article 2516493。
摘录于此:
此修补程序包修复的问题 假设您尝试更改 使用数据定义语言 (DDL) 查询的表结构 以及 64 位版本的 Microsoft 中的 ALTER TABLE 语句 访问 2010。ALTER TABLE 语句包括一个 ALTER COLUMN 范围。在这种情况下,您会收到以下错误消息: 对象无效或不再设置。当您尝试执行 DDL 查询时 通过 VBA 代码,您会收到以下错误消息:运行时 错误“3420”:对象无效或不再设置。
有一个hotfix 于 4 月发布以解决此问题。 Access 2010 Runtime Service Pack 1 于 2011 年 8 月发布,根据发行说明包含此问题的修复程序。
访问 - 当您尝试访问时出现“对象无效或不再设置”错误 使用 ALTER TABLE 查询来更改字段类型或大小。
【讨论】:
以上是关于Alter Table 在 MS Access 64 位下不起作用。为啥?的主要内容,如果未能解决你的问题,请参考以下文章