sql - mostrar - ¿Cómo creo un campo decimal en Access with Alter Table?
mostrar dos decimales sql (3)
El tipo de datos decimales no es compatible con el archivo mdb Jet 4.0 predeterminado. Debe usar la configuración de sintaxis de compatibilidad de SQL Server (ANSI 92) para usar el tipo de datos decimales en la Ventana SQL.
Haga clic en el menú, Herramientas> Opciones. Haga clic en la pestaña Tablas / Consulta. Marque la casilla de verificación para "Esta base de datos" en la sección de sintaxis de compatibilidad de SQL Server (ANSI 92). Este modo afectará a la base de datos completa, incluidas las consultas con comodines, por lo que es posible que desee probar esto en una copia de su base de datos.
Pegue esto en la ventana de SQL:
ALTER TABLE MyTable
Add COLUMN MyField DECIMAL (9,4) NULL;
Si no desea alterar el modo de su base de datos, debe usar el código vba con la biblioteca adodb:
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
conn.Execute "ALTER TABLE MyTable " _
& "ADD COLUMN MyField DECIMAL (9,4) NULL;"
conn.Close
Quiero crear mediante programación una nueva columna en una tabla de MS Access. He intentado muchas permutaciones de ALTER TABLE MyTable Add MyField DECIMAL (9,4) NULL;
y consiguió:
Error de sintaxis en la definición de campo
Puedo crear fácilmente un campo numérico que vaya a un tipo Double
, pero quiero decimal
. Preferiría mucho hacer esto en una sola instrucción ALTER TABLE
y no tener que crear un campo y luego modificarlo.
Estoy usando Access 2003.
La sintaxis de ALTER TABLE solo se admite en Jet 4.0 / ACE en modo de consulta ANSI-92. Pruebe una conexión ADO, por ejemplo
CurrentProject.Connection.Execute "ALTER TABLE myTbl ADD COLUMN myColumn DECIMAL (9,4)"
Si desea crear una nueva columna en una tabla de acceso, es fácil usar el objeto 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
Por supuesto, puedes eliminarlo más.
Es posible que tenga la posibilidad de hacerlo con un objeto ADODB (¿o ADOX?), Pero mientras trabaje en un archivo mdb, DAO es directo y eficiente.
PD: después de verificar en algunos foros, parece que hay un error con los campos decimales y DAO. http://allenbrowne.com/bug-08.html . Los consejos son "ir por el doble" (que es lo que hago generalmente para evitar cualquier problema relacionado con el redondeo decimal) o usar ADO "implicito" para modificar su base de datos
strSql = "ALTER TABLE MyTable ADD COLUMN MyField DECIMAL (28,3);"
CurrentProject.Connection.Execute strSql