【问题标题】:Run-time error 2465 can't find the field '|1' with alter column运行时错误 2465 找不到带有更改列的字段“|1”
【发布时间】:2016-05-04 15:13:33
【问题描述】:

我的代码:

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 table 查询并且运行良好,但是它卡在这个 alter table 部分(我只是包含一个用于测试目的)

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

【问题讨论】:

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


    【解决方案1】:

    这就是你所说的 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"
    

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

    关键点有:

    1. 给自己一个机会来检查您要求数据库引擎执行的已完成的ALTER TABLE 语句 --> Debug.Print strAlter。 IOW,请确保这是您想要的。
    2. 您的表名t_tablename 不需要括起来。但是,如果您想将名称括起来,请将这些括号移到字符串段内。
    3. 关闭SetWarnings 会抑制信息。在进行故障排除时,您希望获得所有最新的信息。因此,当您执行ALTER TABLE 时,请保持SetWarnings 开启。

    如果 Access 仍然找不到 StartDateAll 字段,请仔细检查 Access 认为确实存在的字段的名称。以下是即时窗口会话的示例:

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

    【讨论】:

    • 我现在正在尝试。非常感谢您花时间帮助我。我会尽快告诉你结果如何。
    • 成功!!...原来我的 make table 查询仍然将列名作为 Start_Date_All 传递(duh)我更改了表中的列名但是当我运行代码时,它运行进行表查询,将其清除并将其恢复为 Start_Date_All。一旦我纠正了我的生成表查询,它就完美地工作了......哇。再次感谢您的帮助,它为我省去了很多头痛!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多