运行-time error 2465 cannot find the field '|1' with alter column

Run-time error 2465 can't find the field '|1' with alter column

我的代码:

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 行是调试 window 中突出显示的内容。我以我的 table 名称作为 t_tablename 开头,但出现了语法错误。阅读后我发现“”可能是个问题,所以我删除了 "t",这消除了我的语法错误,但现在我遇到了这个 2465 错误。我的专栏原来是"Start_Date_All",所以改名为"StartDateAll"

我有多个 make table 查询,它合并了各个部门员工的开始日期,生成的合并列是文本而不是日期。我在表单上有一个按钮,上面的代码 运行 到 运行 一个宏 运行 进行 table 查询并且 运行 很好,但它卡在了这个 alter table 部分(我只是为了测试目的包含了一个)

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

这就是您所说的 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 中的文本字段。代码 运行 没有错误,之后我确认该字段已从文本更改为 Date/Time 数据类型。

重点有:

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

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

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