我在Access中遇到更新查询时遇到了问题。
我正在尝试做两件事,向表中添加一个字段,并将另一个字段中的所有值更改为相同的值。
ALTER TABLE 103 ADD COLUMN test TEXT;
UPDATE 103 SET [103].Workcenter = "103";
当我独立运行这两行时,它们工作正常,但是当我将它们放在同一个查询中时,我得到“ALTER TABLE中的语法错误”语句。有谁知道为什么我不能这样做?
如果我可以添加一列并将该字段中的所有值更新为默认值,那也很棒。我在ALTER TABLE命令中尝试过DEFAULT,但它也没有工作。
提前感谢您的建议!
答案 0 :(得分:3)
AS ron tornambe说,在Access Query中不能只有一个命令。他们不支持批处理。
在对表进行更改时,VBA代码是您的朋友:Access中使用的数据定义语言比直接操作数据库对象时VBA中可用的数据定义语言更受限制。
例如,要完全按照您的要求行事:
Public Sub AddFieldAndUpdate()
' Initialise '
Dim db As DAO.Database
Dim tb As DAO.TableDef
Dim fd As DAO.Field
Set db = CurrentDb()
' Get the 103 table '
Set tb = db.TableDefs("103")
' Create a new 'test' field, 128 char long '
Set fd = tb.CreateField("test", dbText, 128)
' Set the Default value for the new field '
fd.DefaultValue = "000"
' Add the new field to the 103 table
tb.Fields.Append fd
' Now do the update
db.Execute "UPDATE 103 SET [103].Workcenter = '103';", dbFailOnError
Debug.Print "Number of Updated records: " & db.RecordsAffected
' Cleanup
Set fd = Nothing
Set tb = Nothing
Set db = Nothing
End Sub
这是它的开玩笑,虽然你可能想要做更多的事情,例如,根据需要设置索引,默认格式等。
答案 1 :(得分:1)
某些表设计功能仅在使用DAO对象模型修改TableDef时可用。其他只有在从ADO连接执行DDL语句时才可用。
您的表格设计更改涉及两种方法都可用的功能。使用您想要的任何一个,但我个人会选择这种方式:
Dim strDdl As String
strDdl = "ALTER TABLE 103 ADD COLUMN test TEXT(128) DEFAULT ""000"";"
CurrentProject.Connection.Execute strDdl