0

私は VB で自動化システムに取り組んでおり、プロジェクトは最終段階にあります。私が直面している問題は、学生のクラスに基づいて通年のレポートを作成したいということです。ただし、レポートが生成されると、レポートのレコードの最初の学生の名前しか表示されず、ループを使用した場合は最後の学生の名前しか表示されません。

参考までに、Access データベースで ADODB を使用し、ADODB.RecordSet を使用してデータを読み取ります。

私のレポート生成部分は次のようになります。

Set RS1 = New ADODB.recordSet
    RS1.Open "SELECT * FROM RECORDS WHERE sClass = '" & ClassBox.Text & "';", connection, 3, adLockOptimistic
    If Not RS1.EOF Then
        Set DataReport2.DataSource = RS1.DataSource
    End If
    RS1.MoveFirst

    Do Until RS1.EOF
    DataReport2.Sections("Section1").Controls("NameLbl").Caption = CStr(RS1!sName)
    DataReport2.Sections("Section1").Controls("SectionLbl").Caption = CStr(RS1!sSection)
    DataReport2.Sections("Section1").Controls("ClassLbl").Caption = CStr(RS1!sClass)

    DataReport2.Sections("Section1").Controls("JanLbl").Caption = CStr(RS1!January)
    DataReport2.Sections("Section1").Controls("FebLbl").Caption = CStr(RS1!February)
    DataReport2.Sections("Section1").Controls("MarLbl").Caption = CStr(RS1!March)
    DataReport2.Sections("Section1").Controls("AprLbl").Caption = CStr(RS1!April)
    DataReport2.Sections("Section1").Controls("MayLbl").Caption = CStr(RS1!May)
    DataReport2.Sections("Section1").Controls("JunLbl").Caption = CStr(RS1!June)
    DataReport2.Sections("Section1").Controls("JulLbl").Caption = CStr(RS1!July)
    DataReport2.Sections("Section1").Controls("AugLbl").Caption = CStr(RS1!August)
    DataReport2.Sections("Section1").Controls("SepLbl").Caption = CStr(RS1!September)
    DataReport2.Sections("Section1").Controls("OctLbl").Caption = CStr(RS1!October)
    DataReport2.Sections("Section1").Controls("NovLbl").Caption = CStr(RS1!November)
    DataReport2.Sections("Section1").Controls("DecLbl").Caption = CStr(RS1!December)
    DataReport2.Sections("Section1").Controls("TotalLbl").Caption = CStr(Val(RS1!January) + Val(RS1!February) + _
    Val(RS1!March) + Val(RS1!April) + Val(RS1!May) + Val(RS1!June) + Val(RS1!July) + Val(RS1!August) + _
    Val(RS1!September) + Val(RS1!October) + Val(RS1!November) + Val(RS1!December))
    RS1.MoveNext
    Loop
    DataReport2.Show

私が望むのは、レポートを作成することです。レポートには、検索基準に基づいて、学生の名前と詳細が順番に含まれています。この場合はクラスです。

4

1 に答える 1

0

既存のコードを変更してみることができます。コントロールに がある場合DataField(使用するコントロールによって異なります)、Captionプロパティの代わりにそれを設定してみてください。また、SUM(January, ...) フィールドを追加するようにクエリを修正しました。その方法を好む場合は、レポートに式フィールドを追加してこれを行うこともできると思います. 行の継続を追加しただけなので、クエリは右に永遠にスクロールしませんでした。

Set RS1 = New ADODB.recordSet
RS1.Open "SELECT sName, sSection, sClass, January, February, March, April, " _
    & "May, June, July, August, September, October, November, December, " _
    & "(January + February + March + April + May + " _
    & "June + July + August + September + October + " _
    & "November + December) AS MonthTotal FROM RECORDS " _
    & "WHERE sClass = '" & ClassBox.Text & "'", connection, 3, adLockOptimistic

' RS1.MoveFirst - not needed

DataReport2.Sections("Section1").Controls("NameLbl").DataField = "sName"
DataReport2.Sections("Section1").Controls("SectionLbl").DataField = "sSection"
DataReport2.Sections("Section1").Controls("ClassLbl").DataField = "sClass"

DataReport2.Sections("Section1").Controls("JanLbl").DataField= "January"
DataReport2.Sections("Section1").Controls("FebLbl").DataField = "February"
DataReport2.Sections("Section1").Controls("MarLbl").DataField = "March"
DataReport2.Sections("Section1").Controls("AprLbl").DataField = "April"
DataReport2.Sections("Section1").Controls("MayLbl").DataField = "May"
DataReport2.Sections("Section1").Controls("JunLbl").DataField = "June"
DataReport2.Sections("Section1").Controls("JulLbl").DataField = "July"
DataReport2.Sections("Section1").Controls("AugLbl").DataField = "August"
DataReport2.Sections("Section1").Controls("SepLbl").DataField = "September"
DataReport2.Sections("Section1").Controls("OctLbl").DataField = "October"
DataReport2.Sections("Section1").Controls("NovLbl").DataField = "November"
DataReport2.Sections("Section1").Controls("DecLbl").DataField = "December"
DataReport2.Sections("Section1").Controls("TotalLbl").DataField = "MonthTotal"
If Not RS1.EOF Then
    Set DataReport2.DataSource = RS1
    DataReport2.Show
End If
于 2013-11-15T01:49:52.933 に答える