运行时错误2465无法使用alter列找到字段“| 1”

时间:2016-05-04 15:13:34

标签: sql ms-access ms-access-2010 runtime-error alter-table

我的代码:

Private Sub UpdateTables_Click()

    DoCmd.SetWarnings False
    MsgBox "Please Wait for the 'Done' message to appear"
    DoCmd.RunMacro "Update_Tables"
    DoCmd.RunSQL "ALTER TABLE " & [tablename] & " ALTER COLUMN StartDateAll DATE;"
    MsgBox "Done"
    DoCmd.SetWarnings True

End Sub

DoCmd.RunSQL行是调试窗口中突出显示的内容。我开始将我的表名称作为t_tablename并出现语法错误。阅读后我发现“”可能是一个问题,所以我放弃了“t ”,摆脱了我的语法错误,但现在我得到了这个2465错误。我的专栏最初是“Start_Date_All”,因此我重命名为“StartDateAll”

我有多个make表查询,它们结合了各个部门的员工的开始日期,结果组合列是文本而不是日期。我在表单上有一个按钮,它运行上面的代码来运行一个运行make表查询的宏,运行正常,但它被卡在这个alter table部分(我只是为了测试目的而包含一个)

我检查了列名的拼写,用双引号尝试了它,也尝试了“& StartDateAll &”...每次都得到2465错误。

1 个答案:

答案 0 :(得分:4)

这就是你所说的Access抱怨它无法找到字段:

DoCmd.RunSQL "ALTER TABLE " & [tablename] & " ALTER COLUMN StartDateAll DATE;"

有一种更好的方法,可能无法解决问题,但至少应该让您更好地理解为什么会发生这种情况:

Dim strTable As String
Dim strAlter As String
strTable = "t_tablename"
DoCmd.SetWarnings True
strAlter = "ALTER TABLE [" & strTable & "] ALTER COLUMN StartDateAll DATE;"
Debug.Print strAlter '<- inspect in Immediate window; Ctrl+g will take you there
CurrentProject.Connection.Execute strAlter
MsgBox "Done"

我使用StartDateAll作为t_tablename中的文本字段在Access 2010中测试了该代码。代码运行没有错误,之后我确认该字段已从Text更改为Date / Time数据类型。

关键点有:

  1. 给自己一个机会来检查您要求数据库引擎执行的已完成的ALTER TABLE语句 - &gt; Debug.Print strAlter。 IOW,确保它符合您的意图。
  2. 您的表格名称t_tablename不应该包围。但是,如果要括起名称,请将这些括号移到字符串段内。
  3. 关闭SetWarnings会抑制信息。在进行故障排除时,您需要获得最后一小部分信息。因此,执行SetWarnings时请保持ALTER TABLE
  4. 如果Access仍无法找到StartDateAll字段,请仔细检查Access认为确实存在的字段的名称。以下是立即窗口会话的示例:

    set db = currentdb
    for each fld in db.TableDefs("t_tablename").Fields : ? fld.name : next
    id
    StartDateAll