2

我正在从事的项目的一部分是以编程方式创建一系列 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 个字母的首字母缩写词?我怎样才能从中得到:

在此处输入图像描述

对此 - 以编程方式?

在此处输入图像描述

4

2 回答 2

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
于 2012-08-02T15:05:41.987 回答
0
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
于 2020-06-01T15:35:16.867 回答