【问题标题】:DEFAULT clause in ALTER TABLE statement resulting in syntax errorALTER TABLE 语句中的 DEFAULT 子句导致语法错误
【发布时间】:2012-05-04 00:02:27
【问题描述】:

我有一个客户想要定制一个旧的 Visual Basic 5 应用程序,该应用程序使用 Access 97 数据库和 Jet 3.5 作为数据库引擎。

所需的自定义需要将一列添加到现有表中。以下工作正常:

strSQL = "ALTER TABLE Users ADD COLUMN Status BYTE"
pdbDatabase.Execute strSQL

但是,我想为新列设置一个默认值(即 0 或 1)。我尝试了以下方法和多种变体:

strSQL = "ALTER TABLE Users ADD COLUMN Status BYTE DEFAULT 1"

但它们都会导致错误声明“ALTER TABLE 语句中的语法错误。(3293)”

在研究这个问题时,我看到了一些信息,这些信息在我过时的 Access 97 和 Jet 3.5 配置中不支持 DEFAULT 子句。

任何人都可以确认这一点或为我指明正确的方向以使其发挥作用吗?

感谢您的帮助。

【问题讨论】:

  • Jet 3.5 / Access 97 中不存在子句

标签: sql ms-access vb6 jet


【解决方案1】:

您可以通过使用 DAO 对象来做到这一点。

微软这样说关于修改 Access 表:

此外,某些类型的 Microsoft Access 特定属性,例如字段的 ValidationRule 和 DefaultValue 属性,只能通过 Microsoft Access 用户界面或代码中的 DAO 进行设置。 p>

您可以在下面的链接中阅读有关它的更多信息。有一些示例,尽管我没有看到它们使用 DefaultValue 属性具体显示的位置。 http://technet.microsoft.com/en-us/library/cc966376.aspx

【讨论】:

    【解决方案2】:

    Per Access 97/Jet 3.5 SQL 文档在描述 ALTER Table 或 CREATE Table 语句时没有提及 DEFAULT 子句。此处将其描述为 Jet 4.0 的新功能:http://support.microsoft.com/kb/275561

    我确定的唯一方法是设置默认值是在 gui 中打开表格设计,然后在字段属性下输入默认值。您是否有权安装 Access 97?

    不过,我也猜想使用 VB/VBA,您可能可以访问字段的默认值属性并设置或修改 - 只是不使用 sql。

    【讨论】:

    • 我需要通过代码来更新每个用户机器上的数据库。虽然,当我在考虑这个问题时,我不确定这是否能满足我的真正需要,即使它确实有效。我真正需要做的是使用新列所需的默认值更新所有现有记录。所以我可能只需要编写一些代码来遍历所有记录并写入该值。
    • 是的,即使是 jet 4.0 中的默认设置也不会更新已经存在的记录。对不起,我没有更好的答案:)。
    • @user1373826 只需通过SQL更新记录UPDATE Users SET Status = 1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多