繁体   English   中英

在MS Access 2003中使用SQL命令添加列时出错

[英]Error adding column using SQL command in MS Access 2003

我想在我的EMP_2表中添加一列。 新的EMP_PCT列将存储百分比作为数字,例如20%作为20.0

我试着输入这个方法。 但它在ALTER TABLE语句中给出了语法错误。

为什么不起作用? 下面是我正在使用的SQL:

ALTER TABLE EMP_2
ADD EMP_PCT NUMBER(4,2);

访问DDL数据类型名称可能很难理清。 NUMBER实际上创建了一个双精度浮点字段。 但是,如果在NUMBER之后尝试在括号中包括字段大小,精度或比例,则会出现语法错误。 无论您是从ADO还是DAO执行,以下语句都会创建一个双字段:

ALTER TABLE MyTable ADD COLUMN EMP_PCT NUMBER;

下一个语句将一个十进制数据类型列添加到MyTable其中precision = 4,scale = 2,这意味着它将在小数点左边保留最多2位数,在右边保存2。

CurrentProject.Connection.Execute "ALTER TABLE MyTable ADD COLUMN EMP_PCT DECIMAL (4,2);"

我使用CurrentProject.Connection来执行DDL语句,因为它是一个ADO对象,而Access SQL只允许您使用ADO创建一个十进制字段。 如果您尝试从DAO执行该语句,则该语句将触发语法错误,如使用CurrentDb.Execute或从Access查询设计器执​​行。 有关详细信息请参阅字段类型引用 - DDL,DAO和ADOX的名称和值

正如@ErikE解释的那样,Access'十进制类型存在问题,特别是对于您正在使用的Access 2003。 考虑您是否可以使用货币类型字段。 由于db引擎处理固定小数位数的方式,它避免了十进制错误并提供更快的性能。

首先,我建议你不要在Access 2003中使用Decimal数据类型,因为它有关于排序(错误的顺序)和聚合(总和截断小数部分)的错误。 在Access 2007中,聚合问题已解决,但不是排序(尽管您可以通过在列上放置索引来解决这个问题)。

至于你的脚本,有两个明显的问题:

  1. 您必须使用ADD COLUMN ColumnName而不是ADD ColumnName

  2. 正确的数据类型是DECIMAL ,因为NUMBER会创建一个双精度浮点数,并且在指定任何类型的大小后不允许使用括号。 也许 NUMERIC可以作为DECIMAL的同义词,但我不知道。)

所以这对你有用:

ALTER TABLE EMP_2 ADD COLUMN EMP_PCT DECIMAL(4,2);

根据HansUp和其他消息来源,这不能通过DAO提交(如在CurrentDb.Execute ),但必须通过ADO( CurrentProject.Connection.Execute )完成。

显然,有一种方法可以使这个SQL工作,但它需要更改数据库设置:

默认的Jet 4.0 mdb文件不支持十进制数据类型。 您必须使用SQL Server兼容性语法(ANSI 92)设置在SQL窗口中使用十进制数据类型。

单击菜单,工具>选项。 单击“表/查询”选项卡。 在SQL Server兼容性语法(ANSI 92)部分中选中“此数据库”复选框。 此模式将影响整个数据库,包括带有通配符的查询,因此您可能希望在数据库的副本上尝试此操作。

如果你仍然无法正常工作,你可以考虑这种方法( 感谢Philippe Grondier ):

Dim TD As DAO.TableDef
Dim F As DAO.Field

Set TD = CurrentDb.TableDefs("TableName")
Set F = TD.CreateField("FieldName", dbDecimal, 4)
F.DecimalPlaces = 2
F.DefaultValue = 0

TD.Fields.Append F

作为参考,以下是一些相关的Microsoft.com帮助页面:

试试这个,

ALTER TABLE EMP_2 
ADD COLUMN EMP_PCT NUMBER(4,2);

或者尝试使用此URL,

AddingFields

试试这个

   ALTER TABLE EMP_2 ADD (EMP_PCT NUMBER (4,2));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM