2009-06-01 63 views
2

当通过ODBC(特别是AS/400)链接到外部数据源时,我经常在另一方遇到隐藏的字段名称,而数据字典不可用。在极少数情况下,我能够从其他数据库获取字段描述,我希望能够一次导入它们,而不是每次将一个描述复制/粘贴到表格设计表单中。如何填充MS Access中的字段描述

我无法在系统表中找到它,所以我不知道这个元数据存储在哪里。有关它在哪里的任何想法,以及它是否可以批量更新?

更新:我设法使用OpenSchema方法(请参阅下面的代码)读取模式,但是这返回一个只读数据集,使我无法更新描述。

Function UpdateFieldDescriptions() 
Dim cn As New ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim rs2 As Recordset 
Dim strSQL As String 
Dim strDesc As String 

Set cn = CurrentProject.Connection 
Set rs = cn.OpenSchema(adSchemaColumns) 

While Not rs.EOF 
    If Left(rs!table_name, 4) <> "MSys" Then 
     Debug.Print rs!table_name, rs!column_name, rs!Description 
     strSQL = "SELECT Description " & _ 
      "FROM tblColumnDescriptions a " & _ 
      "WHERE a.Name = """ & rs!table_name & """ AND " & _ 
      "a.Column = """ & rs!column_name & """;" 
     Set rs2 = CurrentDb.OpenRecordset(strSQL) 
     While Not rs2.EOF 
      strDesc = rs2.Fields(0) 
      rs!Description = strDesc ' <---This generates an error 
     Wend 
    End If 
    rs.MoveNext 
Wend 

rs.Update 
rs.Close 
Set rs = Nothing 
Set rs2 = Nothing 
Set cn = Nothing 

End Function 

回答

1

一些注意事项可能有帮助。以下显示来自adSchemaColumns的字段描述。

Function ListFieldDescriptions() 
    ''List field descriptions 
    Dim cn As New ADODB.Connection, cn2 As New ADODB.Connection 
    Dim rs As ADODB.Recordset, rs2 As ADODB.Recordset 

     Set cn = CurrentProject.Connection 

     Set rs = cn.OpenSchema(adSchemaTables, _ 
      Array(Empty, Empty, Empty, "tablenamehere")) 

     While Not rs.EOF 
      Debug.Print rs!table_name; " desc= "; rs!Description 
      Set rs2 = cn.OpenSchema(adSchemaColumns, _ 
       Array(Empty, Empty, "" & rs!table_name & "")) 
      While Not rs2.EOF 
       Debug.Print "  " & rs2!Column_Name 
       Debug.Print "  " & rs2!Data_Type 
       Debug.Print "  " & rs2!Description 
       Debug.Print "  " & rs2!Is_Nullable 
       rs2.MoveNext 
      Wend 
     rs.MoveNext 
     Wend 
     rs.Close 
     Set cn = Nothing 

    End Function  

来源:http://wiki.lessthandot.com/index.php/ADO_Schemas

+0

这是行不通的 - 的的OpenSchema调用返回一个空的记录。我立即得到rs.EOF。 也许这是由于我的表链接到ODBC数据源。但表和字段描述属性仍然存储在Access数据库的本地,所以他们必须在某个地方... – 2009-06-19 15:21:08

1

使用DAO,而不是ADO:

Sub SetFieldDesc(TblName As String, FldName As String, Description As String) 
Dim db As DAO.Database, td As DAO.TableDef, fld As DAO.Field 

    Set db = CurrentDb() 
    Set td = db.TableDefs(TblName) 
    Set fld = td.Fields(FldName) 

    On Error Resume Next 
    fld.Properties("Description") = Description 
    If Err.Number = 3270 Then 'Property not found.' 
     fld.Properties.Append fld.CreateProperty("Description", dbText, Description) 
    End If 
End Sub