如何在Access报告中将多条记录转换为文本框?

时间:2017-01-23 21:28:15

标签: sql vba ms-access access-vba ms-access-2010

我有一个简单的表,其中只有一个字段。看起来像这样:

PROJECT
Project1
Project2
Project3

我想在Access报告

的文本框中将其自动转换为这样

Project1,Project2,Project3

如果有第3条记录或5条记录到第n条记录,则必须使用此功能。

2 个答案:

答案 0 :(得分:0)

您可以使用VBA循环记录集。

Private Sub cmdProjects_Click()
    'loop through each record, adding the results to the text string
    Dim rs As Recordset
    Dim sql As String

    sql = "SELECT * FROM tblProjects"

    Set rs = CurrentDb.OpenRecordset(sql)

    With rs
        If Not .EOF And Not .BOF Then
            Dim i As Integer
            Dim strOutput As String

            .MoveLast
            .MoveFirst

            For i = 0 To rs.RecordCount - 1
                If i = 0 Then
                    strOutput = !Project
                Else
                    strOutput = strOutput & ", " & !Project
                End If
                .MoveNext
            Next

            Me.txtOutput.Value = strOutput
        End If
    End With

    rs.Close
    Set rs = Nothing
End Sub

答案 1 :(得分:0)

这是一个可以提供SQL语句的函数,它将返回逗号分隔的列表,其中包含该字段中的任何内容。

Public Function FieldString(ByVal sSql As String) As String

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    Set cn = New ADODB.Connection
    cn.Open GetConnectionString

    Set rs = cn.Execute(sSql)

    FieldString = Replace(rs.GetString, vbCr, ", ")

    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing

End Function

它不会检查SQL语句以确保它只是一个字段,或者它不会返回对您的控件来说太长的字符串。但它应该给你基础。

它使用GetString并用逗号/空格组合替换回车符。

以下是我在Immedate窗口中使用我的数据测试它的方法。

?FieldString("SELECT LocationName FROM Locations WHERE LocationCode > 140")
Lemars, Norfolk, Shenandoah, Harrisonville, DEF Production, 

嗯,我猜这里有回车。