【问题标题】:Print Calculated Field Expression's Value to the Microsoft Access Immediate Window将计算字段表达式的值打印到 Microsoft Access 即时窗口
【发布时间】:2022-06-14 04:30:00
【问题描述】:

我做了一些 Microsoft Access DAO 工作,通过语句在我的一个表 (tblEmpls) 中创建了一个 [FullName] 计算字段(cFld As Field2 对象),作为表中 [FirstName] 和 [LastName] 的串联: cFld.Expression = "[FirstName] & ' ' & [LastName]"。

然后我使用 cFld 对象上的 TableDef.Fields.Append 方法将其添加到表中。都很好。

现在,当我尝试通过 'Debug.Print "The FullName field is: " & cFld.Expression' 将该表达式打印到即时窗口时,即时窗口输出为: "计算字段为:[FirstName] & ' ' & [LastName]”,而不是我想要的“计算字段是:David Bailey”。

我想我需要一种在语法上“取消引用”我的 cFld.Expression 对象的方法,以便在 Access VBA 的即时窗口中打印它的值而不是它的名称?

顺便说一句,数据库中的字段按预期显示:[FirstName]:“David”:[LastName]:“Bailey”:和 [FullName]:“David Bailey”

问题:如何获得连接的 [FullName] 值,例如“David Bailey”以在立即窗口中打印,而不是字段名称构造:“[FirstName] & ' ' & [LastName]”?

TableDef 对象在表中创建了计算字段,但是是的,我需要一个 RecordSet 对象来迭代表的记录。显示此内容的最少代码集。

Sub AddCFld()
    Dim db As Database
    Dim tdef As TableDef
    Dim rst As Recordset2
    Dim fld As Field2
    Dim strFldName As String
    Set db = CurrentDb
    strFldName = "FullName"
    Set tdef = db.TableDefs("tblEmpls")
    On Error Resume Next
    Set fld = tdef.Fields(strFldName)
    On Error GoTo 0
    If Not fld Is Nothing Then
        Debug.Print "Oops, the Calculated Field already exists: " & strFldName
        Set fld = Nothing
        Set tdef = Nothing
        Exit Sub
    End If
    Set fld = tdef.CreateField(strFldName, dbText, 200)
    fld.Expression = "[FirstName] & ' ' & [LastName]"
    Debug.Print "The Calculated Field expression is: " & fld.Expression
    tdef.Fields.Append fld
    Set rst = db.OpenRecordset("tblEmpls")
    Do While Not rst.EOF
        Debug.Print "The Calculated Field value is: " & rst!FullName
        rst.MoveNext
    Loop
    db.Close
    Set fld = Nothing
    Set tdef = Nothing
End Sub

立即窗口输出。

AddCFld
The Calculated Field expression is: [FirstName] & ' ' & [LastName]
The Calculated Field value is: Nancy Davolio
The Calculated Field value is: Andrew Fuller
The Calculated Field value is: Janet Leverling
The Calculated Field value is: Margaret Peacock
The Calculated Field value is: Steven Buchanan
The Calculated Field value is: Michael Suyama
The Calculated Field value is: Robert King
The Calculated Field value is: Laura Callahan
The Calculated Field value is: Anne Dodsworth

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    好的,我的答案稍微改了一下:)

    在即时窗口中,您应该使用 .value 而不是 .Expression

    Debug.Print "The FullName field is: " & rs!Fullname.Value
    

    这是一个示例代码:

    Option Compare Database
    Option Explicit
    
    Private Sub Form_Open(Cancel As Integer)
        ' Loop Recordset with Do-Until
        Dim rs As DAO.Recordset
        Set rs = CurrentDb.OpenRecordset("tblEmpls")
        Do Until rs.EOF
            Debug.Print "The fullName value is: " & rs!FullName.Value
            rs.MoveNext
        Loop
        rs.Close
    End Sub
    

    【讨论】:

    • 显示可以显示错误的最少代码!
    【解决方案2】:

    嗯,非常感谢,米克。我想我试图让 TableDef 对象完成 RecordSet 对象的设计目的。哎呀! TableDef 对象在表中创建了计算字段,但是是的,我需要一个 RecordSet 对象来遍历表的记录并将其中的计算字段打印到 Access Immediate 窗口中。我的无知现在得到了缓解! (:>) 显示此的最小代码集...

    Sub AddCFld()
        Dim db As Database
        Dim tdef As TableDef
        Dim rst As Recordset2
        Dim fld As Field2
        Dim strFldName As String
        Set db = CurrentDb
        strFldName = "FullName"
        Set tdef = db.TableDefs("tblEmpls")
        On Error Resume Next
        Set fld = tdef.Fields(strFldName)
        On Error GoTo 0
        If Not fld Is Nothing Then
            Debug.Print "Oops, the Calculated Field already exists: " & strFldName
            Set fld = Nothing
            Set tdef = Nothing
            Exit Sub
        End If
        Set fld = tdef.CreateField(strFldName, dbText, 200)
        fld.Expression = "[FirstName] & ' ' & [LastName]"
        Debug.Print "The Calculated Field expression is: " & fld.Expression
        tdef.Fields.Append fld
        Set rst = db.OpenRecordset("tblEmpls")
        Do While Not rst.EOF
            Debug.Print "The Calculated Field value is: " & rst!FullName
            rst.MoveNext
        Loop
        db.Close
        Set fld = Nothing
        Set tdef = Nothing
    End Sub
    

    立即窗口输出...

    AddCFld
    The Calculated Field expression is: [FirstName] & ' ' & [LastName]
    The Calculated Field value is: Nancy Davolio
    The Calculated Field value is: Andrew Fuller
    The Calculated Field value is: Janet Leverling
    The Calculated Field value is: Margaret Peacock
    The Calculated Field value is: Steven Buchanan
    The Calculated Field value is: Michael Suyama
    The Calculated Field value is: Robert King
    The Calculated Field value is: Laura Callahan
    The Calculated Field value is: Anne Dodsworth
    

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多