【问题标题】:How do I create a decimal field in Access with Alter Table?如何使用 Alter Table 在 Access 中创建十进制字段?
【发布时间】:2008-10-08 00:18:25
【问题描述】:

我想以编程方式在 MS Access 表中创建一个新列。我尝试了ALTER TABLE MyTable Add MyField DECIMAL (9,4) NULL; 的许多排列并得到:

字段定义中的语法错误

我可以轻松地创建一个转为 Double 类型的数字字段,但我想要 decimal。我非常希望在单个 ALTER TABLE 语句中执行此操作,而不必创建字段然后更改它。

我正在使用 Access 2003。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    默认的 Jet 4.0 mdb 文件不支持十进制数据类型。您必须使用 SQL Server 兼容性语法 (ANSI 92) 设置才能在 SQL 窗口中使用十进制数据类型。

    单击菜单,工具 > 选项。单击表/查询选项卡。在 SQL Server 兼容性语法 (ANSI 92) 部分中选中“此数据库”复选框。此模式将影响整个数据库,包括使用通配符的查询,因此您可能希望在您的数据库副本上尝试此操作。

    将其粘贴到 SQL 窗口中:

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

    如果您不想更改数据库的模式,则必须使用带有 adodb 库的 vba 代码:

    Dim conn As ADODB.Connection
    
    Set conn = CurrentProject.Connection
    conn.Execute "ALTER TABLE MyTable " _
        & "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 来修改您的数据库

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

      【讨论】:

        【解决方案3】:

        ALTER TABLE 语法仅在 Jet 4.0/ACE 中受支持,而在 ANSI-92 查询模式。尝试 ADO 连接,例如

        CurrentProject.Connection.Execute "ALTER TABLE myTbl ADD COLUMN myColumn DECIMAL(9,4)"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-04
          相关资源
          最近更新 更多