我想向我的EMP_2
表中添加一列。新的EMP_PCT
列將存儲百分比作爲數字,例如20%
作爲20.0
。在MS Access 2003中使用SQL命令添加列時出錯
我試着輸入這個方法。但它在ALTER TABLE
聲明中給出了語法錯誤。
爲什麼它不起作用?下面是我使用的SQL:
ALTER TABLE EMP_2
ADD EMP_PCT NUMBER(4,2);
我想向我的EMP_2
表中添加一列。新的EMP_PCT
列將存儲百分比作爲數字,例如20%
作爲20.0
。在MS Access 2003中使用SQL命令添加列時出錯
我試着輸入這個方法。但它在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
精確= 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。考慮您是否可以使用貨幣類型字段。它避免了小數位錯誤,並且由於數據庫引擎處理固定小數位數的方式而提供更快的性能。
它也不起作用。它也出現錯誤 – user1933884
這是從我的Access 2003系統上工作的命令複製和粘貼。我只更改了表名和數據類型。我不知道它會失敗。 – HansUp
首先,我建議您在Access 2003中不使用Decimal
數據類型,因爲there are bugs with it圍繞排序(錯誤順序)和聚合(截斷小數部分的總和)。在Access 2007中,聚合問題已解決,但不是排序(儘管您可以通過在列上放置索引來解決此問題)。
至於你的腳本,有兩個明顯的問題:
您必須使用ADD COLUMN ColumnName
不ADD ColumnName
正確的數據類型爲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幫助頁面:
我剛剛嘗試過該方法。它在字段定義中出現語法錯誤 – user1933884
@ user1933884請參閱我的更新。你能使用正常的VB代碼還是必須是SQL語句? – ErikE
哪個具體的錯誤? –
您是否想**添加**新列或**更改現有列? – ErikE
我打算將表EMP_2更改爲包含名爲EMP_PCT的新列,其數據類型爲Number。這個EMP_PCT將存儲百分數。例如:20.00 – user1933884