我正在MS Access中工作。所有表和视图都链接到SQL Server数据库。我想编写一个过程来检索和存储关于这些对象的所有格式化信息。很多这种信息可从属性表(我在设计视图中打开一个表,并创下了属性表F4)。例如:如何以编程方式从链接表的属性表中检索值?
- 过滤
- 顺序按
- 过滤器在加载
- 排序在负载
- 排序在
如何编程检索这些属性?我只看到他们列入报告。
请注意,我需要检索的价值观,而不仅仅是设置。我知道SetFilter方法,这不是我所需要的。
我正在MS Access中工作。所有表和视图都链接到SQL Server数据库。我想编写一个过程来检索和存储关于这些对象的所有格式化信息。很多这种信息可从属性表(我在设计视图中打开一个表,并创下了属性表F4)。例如:如何以编程方式从链接表的属性表中检索值?
如何编程检索这些属性?我只看到他们列入报告。
请注意,我需要检索的价值观,而不仅仅是设置。我知道SetFilter方法,这不是我所需要的。
链接的表存在在你的数据库的TableDefs
收集DAO.TableDef
。所以你可以检查这5个属性的TableDef.Properties
集合。
但是要注意,这两个过滤和排序依据是用户创建的,而不是默认属性,这意味着它们不包含Properties
集合中,除非你指定它们的值。试图检索一个不存在的触发错误3270,“找不到属性” 。您可以陷阱错误,回应它如你所愿,继续对你感兴趣的其他属性。或者你可以先确定属性是否存在,只有尝试在它确实存在于检索其值。
此代码示例使用第一种方法(TRAP)中的错误:
Const cstrTable As String = "YourLinkedTableNameHere"
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strMsg As String
Dim varProp As Variant
Dim varProperties As Variant
On Error GoTo ErrorHandler
varProperties = Array("Filter", "FilterOnLoad", "OrderBy", _
"OrderByOn", "OrderByOnLoad")
Set db = CurrentDb
Set tdf = db.TableDefs(cstrTable)
For Each varProp In varProperties
Debug.Print varProp, tdf.Properties(varProp).Value
Next
ExitHere:
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 3270 ' Property not found.
strMsg = "Property '" & varProp & "' not found."
'MsgBox strMsg
Debug.Print strMsg
Resume Next
Case Else
strMsg = "Error " & Err.Number & " (" & Err.Description & ")"
MsgBox strMsg
Resume ExitHere
End Select
怎么这样呢? (我定义的“表2”有两个字段,“属性名”和“的PropertyValue” ...“表1”是任何现有的表的占位符)
Dim i As Integer
Dim j As Integer
Dim RS As DAO.Recordset
On Error Resume Next
Set RS = CurrentDb.OpenRecordset("select * from table2")
j = CurrentDb.TableDefs("table1").Properties.Count
For i = 0 To j - 1
RS.AddNew
RS!PropertyName = CurrentDb.TableDefs("table1").Properties(i).Name
RS!PropertyValue = Nz(CurrentDb.TableDefs("table1").Properties(i).Value, "-")
RS.Update
Next i
这正是我需要的,谢谢您!我试图找到一个资源来确定哪些属性是用户创建的,而不是默认的,我没有看到任何明显的东西。有没有简单的方法来确定这一点? – Quicksilver
在保存任何自定义项并打印属性名称之前,您可以遍历链接的'TableDef'上的整个'Properties'集合。这些应该是默认属性。任何其他应该是用户创建的属性。对不起,我希望这不是你想要的简单......但这是我能提供的最好的。 ;-) – HansUp