2017-01-23 3 views
0

나는 하나의 필드 만 가지고있는 간단한 테이블을 가지고있다. 다음과 같습니다Access 보고서의 여러 레코드를 텍스트 상자로 바꾸려면 어떻게합니까?

PROJECT 
Project1 
Project2 
Project3 

내가 액세스 보고서에서 텍스트 상자에 자동으로 다음과 같이이 변환 할

에서 Project1, Project2에, 프로젝트 3

이 경우 작동해야 할 것이다 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

감사합니다. 이 코드는 어디에 입력합니까? 보고서의 텍스트 상자에 입력을 시도했지만 txt 출력으로 오류가 계속 실행됩니다. 또한 보고서를 실행하는 폼의 단추에이 코드를 입력하고 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, 

흠, 나는 마침내 캐리지 리턴이 있다고 생각합니다.