簡體   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