2017-01-23 1 views
0

У меня есть простая таблица, в которой просто есть одно поле. Похоже, это:Как превратить несколько записей в текстовое поле в отчете Access?

PROJECT 
Project1 
Project2 
Project3 

Я хочу, чтобы преобразовать это выглядеть автоматически в текстовом поле в отчете Access

Project1, Проект2, Project3

Это будет работать, если в n-й записи есть 3 записи или 5 записей.

ответ

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 
+0

Спасибо! Где я могу ввести этот код? Я попытался войти в текстовое поле в отчете, но я продолжаю работать с txtoutput. Я также попытался ввести этот код в кнопку в форме, которая запускает отчет, и я запускаю ошибку с txtoutput (которую я модифицировал, чтобы сказать «Отчеты»! Project.txtoutput.value = stroutput – Macellaria

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, 

Хммм, я думаю, есть возвратная каретка.

Смежные вопросы