Как создать десятичное поле в Access с помощью Alter Table? - PullRequest
6 голосов
/ 08 октября 2008

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 08 октября 2008

Десятичный тип данных не поддерживается в стандартном файле Jet 4.0 mdb. Необходимо использовать параметр синтаксиса совместимости 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 " _
    & "ADD COLUMN MyField DECIMAL (9,4) NULL;"
conn.Close
3 голосов
/ 08 октября 2008

Если вы хотите создать новый столбец в таблице доступа, легко использовать объект 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 для изменения вашей базы данных

strSql = "ALTER TABLE MyTable ADD COLUMN MyField DECIMAL (28,3);"
CurrentProject.Connection.Execute strSql
3 голосов
/ 08 октября 2008

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

CurrentProject.Connection.Execute "ALTER TABLE myTbl ДОБАВИТЬ КОЛОННА myColumn DECIMAL (9,4)"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...