Как создать десятичное поле в Access с помощью Alter Table?

#sql #ms-access

Вопрос:

Я хочу программно создать новый столбец в таблице MS Access. Я перепробовал много перестановок ALTER TABLE MyTable Add MyField DECIMAL (9,4) NULL; и получил:

Синтаксическая ошибка в определении поля

Я могу легко создать числовое поле, которое относится к Double типу, но я хочу decimal . Я бы очень сильно предпочел сделать это в одном ALTER TABLE операторе и не создавать поле, а затем изменять его.

Я использую Access 2003.

Ответ №1:

Десятичный тип данных не поддерживается в mdb-файле Jet 4.0 по умолчанию. Вы должны использовать параметр Синтаксис совместимости SQL Server (ANSI 92), чтобы использовать десятичный тип данных в окне SQL.

Нажмите на меню «Инструменты» > «Параметры». Перейдите на вкладку Таблицы/Запрос. Установите флажок «Эта база данных» в разделе Синтаксис совместимости SQL Server (ANSI 92). Этот режим повлияет на всю базу данных, включая запросы с подстановочными знаками, поэтому вы можете попробовать это на копии своей базы данных.

Вставьте это в окно SQL:

 ALTER TABLE MyTable
  Add COLUMN MyField DECIMAL (9,4) NULL;
 

Если вы не хотите изменять режим своей базы данных, вы должны использовать код vba с библиотекой adodb:

 Dim conn As ADODB.Connection

Set conn = CurrentProject.Connection
conn.Execute "ALTER TABLE MyTable " _
    amp; "ADD COLUMN MyField DECIMAL (9,4) NULL;"
conn.Close
 

Ответ №2:

Если вы хотите создать новый столбец в таблице доступа, легко использовать объект DAO.TableDef:

 Dim my_tableDef As DAO.TableDef
Dim my_field As DAO.Field

Set my_tableDef = currentDb.TableDefs(my_table)
Set my_Field = my_tableDef.CreateField(my_fieldName, dbDecimal, myFieldSize)
my_Field.decimalPlaces = myDecimalPlaces
my_Field.defaultValue = myDefaultValue

my_tableDef.Fields.Append my_Field

set my_Field = nothing
set my_tableDef = nothing
 

Конечно, вы можете дополнительно удалить его.

Возможно, у вас есть возможность сделать это с помощью объекта ADODB (или ADOX?), Но пока вы работаете с mdb-файлом, DAO прост и эффективен.

PS: после проверки на некоторых форумах кажется, что есть ошибка с десятичными полями и DAO. http://allenbrowne.com/bug-08.html. Советы-это «удвоить»(что я обычно делаю, чтобы избежать каких-либо проблем, связанных с десятичным округлением) или использовать ADO «implicite» для изменения вашей базы данных

 strSql = "ALTER TABLE MyTable ADD COLUMN MyField DECIMAL (28,3);"
CurrentProject.Connection.Execute strSql
 

Ответ №3:

Синтаксис ALTER TABLE поддерживается только в Jet 4.0/ACE в режиме запросов ANSI-92. Попробуйте подключиться к ADO, например

Текущий проект.Соединение.Выполните команду «ИЗМЕНИТЬ ТАБЛИЦУ myTbl, ДОБАВИТЬ СТОЛБЕЦ MyColumn ДЕСЯТИЧНЫЙ(9,4)»