2015-12-14 71 views
2

我正在MS Access中工作。所有表和视图都链接到SQL Server数据库。我想编写一个过程来检索和存储关于这些对象的所有格式化信息。很多这种信息可从属性表(我在设计视图中打开一个表,并创下了属性表F4)。例如:如何以编程方式从链接表的属性表中检索值?

  • 过滤
  • 顺序按
  • 过滤器在加载
  • 排序在负载
  • 排序在

如何编程检索这些属性?我只看到他们列入报告。

请注意,我需要检索的价值观,而不仅仅是设置。我知道SetFilter方法,这不是我所需要的。

回答

4

链接的表存在在你的数据库的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 
+0

这正是我需要的,谢谢您!我试图找到一个资源来确定哪些属性是用户创建的,而不是默认的,我没有看到任何明显的东西。有没有简单的方法来确定这一点? – Quicksilver

+0

在保存任何自定义项并打印属性名称之前,您可以遍历链接的'TableDef'上的整个'Properties'集合。这些应该是默认属性。任何其他应该是用户创建的属性。对不起,我希望这不是你想要的简单......但这是我能提供的最好的。 ;-) – HansUp

0

怎么这样呢? (我定义的“表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 
相关问题