我的代码:
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错误。
答案 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数据类型。
关键点有:
ALTER TABLE
语句 - &gt; Debug.Print strAlter
。 IOW,确保它符合您的意图。t_tablename
不应该包围。但是,如果要括起名称,请将这些括号移到字符串段内。SetWarnings
会抑制信息。在进行故障排除时,您需要获得最后一小部分信息。因此,执行SetWarnings
时请保持ALTER TABLE
。 如果Access仍无法找到StartDateAll
字段,请仔细检查Access认为确实存在的字段的名称。以下是立即窗口会话的示例:
set db = currentdb
for each fld in db.TableDefs("t_tablename").Fields : ? fld.name : next
id
StartDateAll