【问题标题】:How to populate field descriptions in MS Access如何在 MS Access 中填充字段描述
【发布时间】:2009-06-01 15:02:53
【问题描述】:

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

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

更新:我设法使用 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

【问题讨论】:

    标签: ms-access import schema field


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      一些可能会有所帮助的注释。下面显示了来自 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

      【讨论】:

      • 这不起作用 - OpenSchema 调用返回一个空记录集。我立即得到 rs.EOF。这可能是因为我的表链接到 ODBC 数据源。但是表和字段描述属性仍然存储在本地访问数据库中,所以它们必须在某个地方......
      • 我设法通过将条件字段留空来从 OpenSchema 取回数据。我现在可以阅读列说明。但是,OpenSchema 方法返回一个静态的只读记录集,因此我无法更新描述。任何想法如何将更新恢复到架构中?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2019-06-12
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多