4

EMP_2テーブルに列を追加したい。新しいEMP_PCT列には、パーセンテージが数値として、たとえば。として格納20%され20.0ます。

このメソッドを入力してみました。ALTER TABLEしかし、ステートメントに構文エラーがありました。

なぜ機能しないのですか?以下は私が使用しているSQLです。

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

4 に答える 4

2

アクセスDDLデータ型名は、分類が難しい場合があります。 NUMBER実際には、倍精度浮動小数点数としてフィールドを作成します。ただし、フィールドサイズ、精度、またはスケールを括弧の後NUMBERに含めようとすると、構文エラーが発生します。次のステートメントは、ADOまたはDAOのどちらから実行する場合でも、doubleフィールドを作成します。

ALTER TABLE MyTable ADD COLUMN EMP_PCT NUMBER;

次のステートメントは、小数点MyTableの左側に最大2桁、右側に最大2桁を保持することを意味する、精度=4およびスケール=2の10進数データ型列をに追加します。

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

CurrentProject.ConnectionDDLステートメントはADOオブジェクトであるため、以前は実行していました。AccessSQLでは、ADOを使用して10進フィールドしか作成できません。このステートメントをDAOから実行しようとすると、Accessクエリデザイナを使用しCurrentDb.Executeたり、Accessクエリデザイナから実行したりすると、構文エラーが発生します。詳細については、フィールドタイプリファレンス-DDL、DAO、およびADOXの名前と値を参照してください。

@ErikEが説明したように、Accessの10進型は、特に使用しているAccess2003では問題があります。代わりに通貨タイプフィールドを使用できるかどうかを検討してください。これは、小数点以下のバグを回避し、dbエンジンが固定小数点以下の桁数を処理する方法により、より高速なパフォーマンスを提供します。

于 2012-12-28T07:40:16.280 に答える
1

まず、DecimalAccess 2003ではデータ型を使用しないことをお勧めします。これは、並べ替え(順序が間違っている)と集計(小数部分の合計)に関するバグがあるためです。Access 2007では、集計の問題は解決されますが、並べ替えは解決されません(ただし、Access 2007では、列にインデックスを付けることでこれを修正できると思われます)。

スクリプトに関しては、2つの明らかな問題があります。

  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.ExecuteADO(CurrentProject.Connection.Execute)を介して送信する必要があります。

どうやら、このSQLを機能させる方法はありますが、データベース設定を変更する必要があります。

10進データ型は、デフォルトのJet4.0mdbファイルではサポートされていません。SQLウィンドウで10進データ型を使用するには、SQL Server互換性構文(ANSI 92)設定を使用する必要があります。

メニューの[ツール]>[オプション]をクリックします。[テーブル/クエリ]タブをクリックします。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のヘルプページを次に示します。

于 2012-12-28T07:38:03.087 に答える
0

これを試して、

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

または、このURLを使用してみてください。

AddingFields

于 2012-12-28T07:25:57.290 に答える
0

これを試して

   ALTER TABLE EMP_2 ADD (EMP_PCT NUMBER (4,2));
于 2012-12-28T07:27:51.770 に答える