【问题标题】:Setting decimal places in an MDB database在 MDB 数据库中设置小数位
【发布时间】:2012-08-02 14:35:50
【问题描述】:

我正在处理的项目的一部分是以编程方式创建一系列 MDB 文件,这些文件将成为最终的可交付成果。客户的规范要求表格中的某些字段保留 3 位小数。

我首先使用 python 创建 mdb 文件,然后为了能够将列更改为 DECIMAL (10,3),我使用 ADODB (C#, .NET 4.0) - 因为我找不到合适的Python。但问题是这对客户来说还不够。他们希望打开 MDB 并在设计模式下查看这些字段的小数位数设置为 3。如果不是,则不接受该文件。

现在我花了 3 天的时间来尝试想出一个解决方案。一个可能的候选对象是 DAO 和 Field2 对象,但到目前为止,我还没有发现这个对象。我正在使用 Microsoft DAO 3.6 对象,但 Field2 似乎不是程序集的一部分。甚至不知道这是否真的会做所需要的......

有谁知道这样做的方法吗?老实说,不在乎它的 DAO、ADO、OLEDB 还是任何其他 3 个字母的首字母缩写词?我怎么能从中得到:

到这个 - 以编程方式??

【问题讨论】:

    标签: ms-access ado.net dao


    【解决方案1】:

    我可以告诉你如何在 VBA/DAO 中做到这一点,这可能会给你一些想法。您必须先附加属性:

    sSQL = "create table testX (id counter, anumber decimal(10,3))"
    CurrentProject.Connection.Execute sSQL
    
    Dim db As Database
    Dim tdf As TableDef
    Dim fld As dao.Field
    
    Set db = CurrentDb
    
    Set tdf = db.TableDefs("testX")
    Set fld = tdf.Fields("anumber")
    'fld.Properties("DecimalPlaces") = 3
    Set prp = fld.CreateProperty("DecimalPlaces", dbByte, 3)
    tdf.Fields("anumber").Properties.Append prp
    

    【讨论】:

    • 谢谢@Remou 这也适用于现有表吗?无论如何我都会尝试一下
    • 是的,会的。顶部的线条点是为了说明该表是用 ADO 创建的,但小数位是用 DAO 设置的。但是请注意,如果已创建小数位属性,您将收到一个可捕获的错误。
    • 你是明星!这在 C# 中非常好用,非常感谢。想想下次我会更早地使用这个网站:-)
    • 您是否找到了一种方法来做到这一点,是 ADOX 还是您必须在 DAO 中这样做,如示例中所示?
    • @mapoholic 它在 C# 中运行良好,然后没有在 C# 中为像我这样的 n00bs 发布解决方案:C - 你可以发布解决方案,即使认为这是 4 年前哈哈...
    【解决方案2】:
    Public Sub DBF_SetDecPoints(ByVal DBNom As String, ByVal DBTab As String, ByVal Campo As String, ByVal NDEC As Short)
        Dim DB As DAO.Database
        Dim TD As DAO.TableDef
        Dim FD As DAO.Field
        Dim PP As DAO.Property
    
        If DBF_Exists(DBNom, DBTab, Campo) Then
            'Call DBF_SetProperty(DBNom$, DBTab$, Campo$, "Format", DaoText, "Fixed")
            DB = DAOEngine.Workspaces(0).OpenDatabase(DBNom)
            TD = DB.TableDefs(DBTab)
            FD = TD.Fields(Campo)
            PP = FD.CreateProperty("Format", DaoText, "Fixed")
            On Error Resume Next
            FD.Properties.Append(PP)
            FD.Properties("Format").Value = "Fixed"
            PP = FD.CreateProperty("DecimalPlaces", DaoByte, NDEC)
            FD.Properties.Append(PP)
            FD.Properties("DecimalPlaces").Value = NDEC
            On Error GoTo 0
            DB.Close()
        End If
    End Sub
    

    【讨论】:

    • 欢迎来到 SO 并感谢您分享您的知识。如果您能解释 为什么 它会起作用以及它的哪一部分特别适用于 OP 的问题,那么您的答案会更好。
    猜你喜欢
    • 2015-05-19
    • 2016-10-16
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2020-09-30
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多