我正在研究的项目的一部分是以编程方式创建一系列MDB文件,这将是最终的可交付成果。来自客户的规范要求表中的某些字段有3个小数位。
我首先使用python创建mdb文件,然后为了能够将列更改为DECIMAL(10,3),我使用ADODB(C#,.NET 4.0) - 因为我找不到合适的内容蟒蛇。问题是,这对客户来说是不够的。他们想要打开MDB并在设计模式下查看这些字段的小数位数设置为3.如果不是,则不接受该文件。
现在我已经花了3天的时间来试图找到解决方案。一个可能的候选人是DAO和Field2对象,但是这个目标到目前为止还没有找到我。我使用的是Microsoft DAO 3.6对象,但Field2似乎不是程序集的一部分。而且甚至不知道这是否真的会做所需要的......
有谁知道这样做的方法?不关心它的DAO,ADO,OLEDB或任何其他3个字母的首字母缩写是否诚实?我怎样才能从中得到:
到此 - 编程??
答案 0 :(得分: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
答案 1 :(得分: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