2012-12-28 77 views
4

我想向我的EMP_2表中添加一列。新的EMP_PCT列將存儲百分比作爲數字,例如20%作爲20.0在MS Access 2003中使用SQL命令添加列時出錯

我試着輸入這個方法。但它在ALTER TABLE聲明中給出了語法錯誤。

爲什麼它不起作用?下面是我使用的SQL:

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

哪個具體的錯誤? –

+0

您是否想**添加**新列或**更改現有列? – ErikE

+0

我打算將表EMP_2更改爲包含名爲EMP_PCT的新列,其數據類型爲Number。這個EMP_PCT將存儲百分數。例如:20.00 – user1933884

回答

2

訪問DDL數據類型名稱可能難以整理。 NUMBER實際上創建一個字段作爲雙精度浮點數。但是,如果在NUMBER之後嘗試在字段中包含字段大小,精度或縮放比例,則會出現語法錯誤。以下語句創建一個雙場是否您從ADO或DAO執行它:

ALTER TABLE MyTable ADD COLUMN EMP_PCT NUMBER; 

下一個語句增加了一個十進制數據類型列MyTable精確= 4和標尺= 2,這意味着它將容納小數點左邊2位數字,右邊2位數字。

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

我用CurrentProject.Connection,因爲它是一個ADO對象,訪問SQL只允許您創建一個小數場與ADO執行DDL語句。如果您嘗試從DAO執行它,則會觸發語法錯誤,例如CurrentDb.Execute或Access查詢設計器。有關更多信息,請參閱Field type reference - names and values for DDL, DAO, and ADOX

正如@ErikE所解釋的,Access的十進制類型存在問題,特別是對於您正在使用的Access 2003。考慮您是否可以使用貨幣類型字段。它避免了小數位錯誤,並且由於數據庫引擎處理固定小數位數的方式而提供更快的性能。

+0

它也不起作用。它也出現錯誤 – user1933884

+0

這是從我的Access 2003系統上工作的命令複製和粘貼。我只更改了表名和數據類型。我不知道它會失敗。 – HansUp

0

試試這個,

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

要不嘗試使用這個URL,

AddingFields

+0

它仍然出現語法錯誤 – user1933884

+0

立即試用..編輯答案 – Mari

+0

我只是嘗試你的,仍然錯誤 – user1933884

0

試試這個

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

它仍然是錯誤,它出現語法錯誤的字段定義 – user1933884

1

首先,我建議您在Access 2003中不使用Decimal數據類型,因爲there are bugs with it圍繞排序(錯誤順序)和聚合(截斷小數部分的總和)。在Access 2007中,聚合問題已解決,但不是排序(儘管您可以通過在列上放置索引來解決此問題)。

至於你的腳本,有兩個明顯的問題:

  1. 您必須使用ADD COLUMN ColumnNameADD 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)完成。

顯然,有a way to get this SQL working但它需要一個數據庫的設置更改:

十進制數據類型在默認的Jet 4.0 MDB文件的支持。您必須使用SQL Server兼容性語法(ANSI 92)設置才能在SQL窗口中使用十進制數據類型。

點擊菜單工具>選項。點擊Tables/Query選項卡。在SQL Server兼容性語法(ANSI 92)部分標記「此數據庫」的複選框。這個模式會影響整個數據庫,包括帶有通配符的查詢,所以你可能想在你的數據庫副本上試試這個。

如果仍然不能得到的東西的工作,你可能會考慮這種方法(thanks to 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幫助頁面:

+0

我剛剛嘗試過該方法。它在字段定義中出現語法錯誤 – user1933884

+0

@ user1933884請參閱我的更新。你能使用正常的VB代碼還是必須是SQL語句? – ErikE