2012-05-04 112 views
2

我有一个客户想要定制到使用Access 97数据库和Jet 3.5作为数据库引擎的旧的Visual Basic 5应用程序。ALTER TABLE语句中的DEFAULT子句导致语法错误

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

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)”。我已经看到了一些在DEFAULT子句中隐藏的信息,在我过时的Access 97和Jet 3.5配置中不受支持。

任何人都可以证实这一点或指出我在正确的方向得到这个工作?

感谢您的帮助。

+1

子句在Jet 3.5/Access 97中不存在 – RThomas

回答

1

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。

+0

我需要通过代码来完成,以便每个用户计算机上的数据库都得到更新。虽然,当我想到这个时,我不确定那会做我真正需要的东西,即使它确实有效。我真正需要做的是使用新列的所需默认值更新所有现有记录。所以我可能只需编写一些代码来遍历所有记录并写入该值。 – user1373826

+0

是的,即使在jet 4.0中的默认设置也不会更新已经存在的记录。对不起,我没有更好的答案:)。 – RThomas

+1

@ user1373826只需通过SQL更新记录'UPDATE Users SET Status = 1' – MarkJ

4

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

微软表示此有关修改Access表:

此外,某些类型的Microsoft Access特定性质,诸如字段的有效性规则和默认值的属性,只能通过Microsoft Access用户界面或设置通过代码中的DAO。

您可以在下面的链接中阅读更多关于它的信息。有些例子,虽然我没有看到他们使用DefaultValue属性专门显示的地方。 http://technet.microsoft.com/en-us/library/cc966376.aspx