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 位下不起作用。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

左连接 SQL 查询 - MS Access

使用 Delphi 将文本文件加载到 MS ACCESS TABLE

如何批量检查 MS-Access 中的重复项并记录更改?

从 MS Access 中删除所有记录

执行ALTER TABLE语句时如何避免长时间阻塞并发查询

MS Access SQL 查询 - 加入错误