Report : การตั้งเลขที่หน้าแบบกลุ่ม ?
กระทู้เก่าบอร์ด อ.Yeadram

 2,524   7
URL.หัวข้อ / URL
Report : การตั้งเลขที่หน้าแบบกลุ่ม ?

ถามหน่อยสิครับ ถ้า Report ของเราตั้งเอาไว้ให้เป็นแบบกลุ่ม และก็ตั้งให้มันขึ้นหน้าใหม่ทุกๆกลุ่ม...

คราวนี้ผมอยากแยกเลขหน้าให้มันเป็นกลุ่มด้วยได้ไหมครับเช่น
ข้อมูลของผมมีอยู่ 3 กลุ่ม (A,B,C) โดยแต่ละกลุ่มมีข้อมูล 100,200,300 record ตามลำดับ ใน report ก็จะแสดงเลขหน้าต่อกันไปยาว 1,2,3 ... ไปจนสุด Report   แต่สิ่งที่ผมต้องการคือ ให้มันขึ้นเลขหน้าใหม่ทุกครั้งที่เปลี่ยนกลุ่มโดยมีเลขหน้ารวมของแต่ละกลุ่มอยู่ด้วยเช่น
กลุ่ม A
Page 1 of 3
Page 2 of 3

กลุ่ม B
Page 1 of 4
... Page 4 of 4
อะไรประมาณนี้

7 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R00779
สร้างพารามิเตอร์ให้ระบุ เมื่อมีการเรียกรายงาน
ให้แสดงรายงานเฉพาะกลุ่มที่ระบุ ก็จะได้ตามความต้องการ
เพราะไหนๆ เราก็ตั้งใจให้แต่ละกลุ่มอยู่แยกคนละหน้าอยู่แล้ว (คงไม่คิดจะเขียนว่า "หน้าที่ 3/3 ของกลุ่ม A และเป็นหน้าที่ 1/3 ของกลุ่ม B" ในหน้าเดียวกันใช่มั้ยครับ อิอิ)

หากต้องการ สรุปยอดของทุกๆ กลุ่ม ใช้ sub form หรือ sub report ช่วยที่ท้ายรายงาน

- เรียกรายงานได้เร็วขึ้นเพราะโหลดข้อมูลน้อยกว่า (โหลดทีละกลุ่ม)
- ไม่ต้องออกแบบรายงานใหม่ ไม่ต้องเขียนโค้ดเพิ่มเติม ประหยัดทรัพยากรเครื่อง ประหยัดพื้นที่รวมของดาต้าเบส

ตอบไม่ตรงคำถามนัก แต่คิดว่า วิธีนี้ก็น่าจะเอามาพิจารณา ทดแทนกันได้นะครับ

2 @R00780
โค้ดนี้เป็นโค้ดอันดับต้นๆที่ผมนับถือมากๆ เพราะไม่ได้ใช้ API อะไรเลย ใช้เฉพาะคุณสมบัติที่มีมากับ Access อยู่แล้ว แต่สามารถทำในสิ่งที่เหมือนจะทำไม่ได้ใน Report ให้กลายเป็นสิ่งที่เป็นไปได้ ผู้ที่คิดวิธีนี้ได้ซึ่งกระชับมากๆ ไม่ใช่แค่เซียน แต่ต้องเรียกว่าเป็นระดับ "โคตรเซียน" เลยทีเดียว

Printing First and Last Page Numbers for Report Groups

3 @R00781
ขอบคุณครับคุณสันติสุข ลองเอาไปใช้ดูแล้ว OK เลย...
เมื่อก่อนผมต้องใช้วิธี การนับ record ซึ่งค่อนข้างยุ่งยาก
4 @R01765
Code นี้นำไปใช้อย่างไรครับ

'************ Code Start *************
' This code was originally written by James H Brooks.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' James H Brooks
'
Option Compare Database
Option Explicit

Dim GrpArrayPage(), GrpArrayPages()
Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant
Dim GrpPage As Integer, GrpPages As Integer

Private Sub PageFooter_Format(Cancel As Integer, FormatCount As Integer)
Dim i As Integer
If Me.Pages = 0 Then    
    ReDim Preserve GrpArrayPage(Me.Page + 1)
    ReDim Preserve GrpArrayPages(Me.Page + 1)    
    GrpNameCurrent = Me!Salesperson
    If GrpNameCurrent = GrpNamePrevious Then
        GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1
        GrpPages = GrpArrayPage(Me.Page)
            For i = Me.Page - ((GrpPages) - 1) To Me.Page
               GrpArrayPages(i) = GrpPages            
            Next i    
    Else
        GrpPage = 1       
        GrpArrayPage(Me.Page) = GrpPage
        GrpArrayPages(Me.Page) = GrpPage    
    End If
Else
    Me!ctlGrpPages = "Group Page " & GrpArrayPage(Me.Page) & " of " & GrpArrayPages(Me.Page)
End If
GrpNamePrevious = GrpNameCurrent
End Sub
'************ Code End *************

5 @R01766
ในหน้าเวปที่ให้ลิงค์ไป ก็อธิบายไว้หมดแล้วนี่คับ
6 @R01768
มีตัวอย่างไฟล์ที่ใช้ code นี้ไหมครับ
ผมลองทำแล้ว มันเกิด #Error ครับ
7 @R01771
ผมมีแต่ application ที่ทำจริง ให้ไม่ได้ครับ ... คิดว่าคุณคงทำผิดที่จุดใดสักจุด   ถ้าได้ ลอง email ไฟล์ของคุณไปไว้ที่ accboard@gmail.com ดูครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2789s