【问题标题】:Access adding column of type decimal(number with fieldsize decimal)访问添加十进制类型的列(字段大小为十进制的数字)
【发布时间】:2013-06-13 08:19:34
【问题描述】:

在 access 2007 中如何使用查询向 access 表中添加十进制类型的列? 在 GUI 中,我可以选择数据类型为数字,为此我可以将字段大小设置为十进制。 现在我想用查询做同样的事情。它怎么做? 我尝试在访问查询选项中运行以下操作。但没有用

ALTER TABLE MyTable ADD COLUMN MyField DECIMAL (10,3)

另外,我如何使用数据类型日期/时间和格式为 longtime 的列进行广告。所以请告诉我如何使用查询或使用任何代码来完成这两个操作。

【问题讨论】:

    标签: sql ms-access command ms-access-2007


    【解决方案1】:

    您的查询看起来不错。

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

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

    【讨论】:

    • 对不起,我没有得到工具 > 访问 2007 中的选项。还应该启用它吗?
    • 请看这个链接,我认为它更好地解释了需要做什么。 office.microsoft.com/en-gb/access-help/…
    • 使用 ADO 我可以运行查询 CurrentProject.Connection.Execute "ALTER TABLE MyTable ADD COLUMN MyField DECIMAL (10,3)" 并且工作正常。但如果同样使用 ODBC,则会出现类似“ERROR [42000] [Microsoft][ODBC Microsoft Access Driver] 字段定义中的语法错误”的错误。为什么会发生这种情况?如何在 ODBC 中完成?
    • 如果您使用的是 Access 数据库,则无法通过 ODBC 连接到 Access 数据库。如前所述,您可以(应该)只使用表格设计器,或者您注意的 CurrentProject。
    【解决方案2】:

    VBA 解决方案

    Dim db As Database
    Dim t As TableDef
    Dim f As Field
    Dim p
    
    Set db = CurrentDb
    Set t = db.TableDefs("myTable")
    Set f = t.createField("myDateField", dbDate)
    Call t.Fields.Append(f)
    
    Set p = f.CreateProperty("Format", dbText, "Long Date")
    Call f.Properties.Append(p)
    

    【讨论】:

      【解决方案3】:

      上面的 office.microsoft 链接现在也消失了。以下是在 Access 2007 中设置 SQL Server 兼容性语法标志的方法(可能稍后 - 我无法检查,因为我只有 2007):

      • 点击左上角的圆形 Office 按钮
      • 访问选项
      • 对象设计器
      • 单击 SQL Server Compatible Syntax 下的任一选项,具体取决于您希望它仅应用于此数据库还是未来的所有数据库

      如果“此数据库”复选框被禁用,请尝试关闭并重新打开数据库,然后再次执行这些步骤,而不要先接触数据库的任何其他部分

      进行此更改后,在创建/更改表时使用旧版“DECIMAL(11,2)”SQL 可以正常工作。

      【讨论】:

      • 您肯定不想突然在现有应用程序中打开 ANSI SQL 兼容性。即使是简单的通配符 sql,例如 LastName like 'Smi*',也必须更改为 LastName like 'Smi%'。如果不是从头开始构建并考虑到该选项并打开,那么您在很大程度上会使现有应用程序变得无用。我想对于一个时间表更改一个可以做到这一点,但使用一些代码或使用 currentProject.Execute 可能更容易。
      猜你喜欢
      • 2022-01-06
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多