เข้าถึง 2007 วิธีใช้ VBA เพื่อวนซ้ำผ่าน Query และวนซ้ำผ่านรายงานการพิมพ์

ฉันมีโมดูลที่มีอยู่ซึ่งพิมพ์ชุดรายงานตามแบบสอบถาม (รายงานห้องเรียน CAP gr 5) โดยการวนซ้ำผ่านตารางอื่น (School_room_grade) รายงานถูกพิมพ์ตาม WhereCondition ในโมดูลที่ตรงกับแถวในตาราง School_room_grade กระบวนการนี้ใช้เพื่อให้แต่ละคอมโบ school_room_grade มีรายงานทั้งหมดพร้อมกัน และไม่ต้องใช้รายงาน

รายงานฉบับหนึ่ง (CAP Math Gr 5) ได้รับการแก้ไข และขณะนี้มีรายงานย่อยที่เชื่อมโยงกัน 7 รายงาน ซึ่งทำให้กระบวนการช้าลง รายงานย่อยแต่ละรายงานอิงตามแบบสอบถามเดียวกัน แต่จัดเรียงโดยใช้ฟิลด์ต่างกัน ฉันคิดว่าการยกเลิกการเชื่อมโยงรายงานย่อยและจำกัดการค้นหาให้เหลือเพียงชุดค่าผสม school_room_grade เดียวในแต่ละครั้งอาจเป็นการดีกว่า เมื่อฉันทำรายงานครั้งแรกโดยไม่เชื่อมโยงรายงานย่อย ดูเหมือนว่าจะทำงานเร็วขึ้น แต่แน่นอนว่าเมื่อไม่มีการเชื่อมโยง การเรียงลำดับรายงานจะไม่ทำงาน

ฉันคิดว่าฉันควรจะสร้างการวนซ้ำแบบซ้อนกับข้อความค้นหาจากภายนอก จากนั้นจึงวนซ้ำการพิมพ์รายงาน คุณคิดว่าสิ่งนี้จะช่วยเพิ่มความเร็วได้หรือไม่?

นี่คือรหัสการพิมพ์รายงานต้นฉบับที่ทำงานก่อนที่จะเพิ่มในรายงานที่เชื่อมโยง

Option Compare Database

'------------------------------------------------------------
' Print Grade 5 & 6 CAP homeroom reports
'
'------------------------------------------------------------
Sub PrintReports()

    Dim rs As DAO.Recordset
    Dim rptArr As Variant
    Dim rpt As Long

    rptArr = Array("CAP MATH GR 5", "CAP ELA GR 5")

    Set rs = CurrentDb.OpenRecordset("school_room_query_table_5")

    With rs
        .MoveFirst
        Do While Not .EOF
            For rpt = LBound(rptArr) To UBound(rptArr)
                DoCmd.OpenReport ReportName:=rptArr(rpt), View:=acViewNormal, _
                    WhereCondition:="[school_room_grade] = '" & rs!school_room_grade & "'"
            Next
            .MoveNext
        Loop
        .Close
    End With

    MsgBox "Done"

End Sub

ข้อความค้นหาที่รายงานทั้งหมดอิงตาม: [cap Classroom Report gr 5] - ช่องเกณฑ์คือ [school_room_grade] ตารางที่ใช้สำหรับลูปคือ [school_room_query_table_5] และช่องที่ตรงกันคือ [school_room_grade]

ฉันไม่เคยทำการวนซ้ำแบบสอบถามที่มีชื่อ - สามารถทำได้หรือไม่


person Brent    schedule 21.10.2010    source แหล่งที่มา
comment
ฉันได้ตัดสินใจแยกการสืบค้นออกเป็นสองส่วนและเรียกใช้รายงานจากการสืบค้นขนาดเล็กที่แยกจากกันเหล่านี้ ที่ได้ปรับปรุงประสิทธิภาพ ฉันยังคงสนใจที่จะรู้ว่าเป็นไปได้หรือไม่ที่จะวนซ้ำแบบสอบถามที่มีชื่อและเพียงอ้างอิงชื่อแบบสอบถามหรือว่าคุณจะต้องคัดลอกไวยากรณ์ทั้งหมดลงใน VBA และใส่ฟิลด์เกณฑ์ลงในคำสั่ง Where ของไวยากรณ์นั้น   -  person Brent    schedule 22.10.2010


คำตอบ (1)


Dim db as Database
Dim rs as RecordSet

Set db = DAO.OpenDatabase("Database path")
Set rs = db.OpenRecordSet("Query name")

For i = 0 To rs.QueryDefs.Count - 1

     rs.QueryDefs.Name

next i

บางสิ่งเช่นนี้ควรทำงานเพื่อวนซ้ำชื่อของชื่อคำจำกัดความของคิวรีทั้งหมด

person Roi-Kyi Bryant    schedule 26.08.2011