เรื่องรายงานครับ
กระทู้เก่าบอร์ด อ.Yeadram

 6,087   30
URL.หัวข้อ / URL
เรื่องรายงานครับ

สวัสดีครับทุกท่าน

วันนี้ผมมีคำถามเกี่ยวกับเรื่องรายงานครับ

คือผมได้ทำรายงานใน access แล้วต้องการให้ลำดับที่มันรันอัตโนมัติอ่ะครับ ผมได้ลองใส่ ตรง record source ของ textbox อ่ะครับเป็น =1 ปรากฏว่าตอนรันจริงๆ มันขึ้น 1 มาหมดทุกอันเลยครับ ผมใส่ตรงไหนผิดหรือเปล่าครับหรือว่าต้องเพิ่มตรงไหนซักแห่ง

อีกอย่างคือ ผมต้องการเรียกรายงานโดยใช้เงื่อนไขเป็นเดือน คือประมาณว่า ถ้าผมต้องการรายงานของเดือนมกราคม ผมสามารถใช้ field ที่เป็น format มาแล้วได้หรือเปล่าครับ หรือถ้าไม่ได้ ผมจะใช้เป็น Between จะได้หรือเปล่า และ Between ผมต้องประกาศยังไงอ่ะครับ ผมลองใช้เครื่องหมาย # ใส่ปิดหน้าหลังของวันที่แล้ว ปรากฎว่า มันไม่ขึ้นมาตามที่ต้องการอ่ะครับ

ช่วยหน่อยครับ ขอบคุณครับ

30 Reply in this Topic. Dispaly 2 pages and you are on page number 2

21 @R02232
อ่าครับ ผมก็ดันพลาดซะอีก ขอบคุณครับ

นี้คือตัวอย่างโค้ดที่เพิ่มเติมครับ ตอนนี้ มีสิ่งที่ผมเพิ่มเข้าคือไป มี textbox ชื่อ txty อยู่ข้างหลังตัวเลือก "ทั้งหมด" ครับ

สิ่งที่ต้องการคือ เมื่อมีการเลือก "ทั้งหมด" จะเปิดรายงาน "rptNew" โดยมีการให้ใส่ปีที่ต้องการลงไปใน txty

ผมอยากให้ตรวจสอบโค้ดว่า ที่ผมเขียนถูกหรือเปล่าครับ ผมมีการใส่ if ซ้อน if เข้าไปอ่ะครับ
Select Case frmChoice
Case 1
rname = "rptnew"
Case 2
txty = ""
rname = "rptNewByMonth"
Case 3
txty = ""
rname = "rptNewBySectByMonth"
sect = "[section] like '*" & Text22 & "*'"
End Select
If Not IsNull(txty) Then
sql = "Year([start_date]) = " & txty
Else
    Select Case frmMonth
        Case 1
    sa = "Month([start_date]) = " & txtdat.Text
        Case 2
    sa = "Month([start_date]) Between " & txtdatefrom & " And " & txtdatend.Text
    End Select
        If Not IsNull(Text22) Then
    sql = sa & " And " & sect
        Else
    sql = sa
        End If
End If


และีอีกอย่างครับ มีวิธีไมครับ ที่สามารถเคลียค่า txty ให้กลับมาเป็น null ได้ ผมลองให้ txt = " " แต่มันไม่ใช่ค่า null อ่ะครับ มันเป็น white space มันเลยไม่สามรถเข้าเงื่อนไขของ is not null ได้

อาจจะมั่วๆ ครับ ขอโทษน่ะครับ และขอบคุณครับ

22 @R02234
txty เป็น textbox ผูกกับฟิลด์ใดๆ ในตารางหรือเปล่า
ลองตั้งค่า
txty.value=null
เอาฟิลด์ที่มันผูกอยู่ ตั้งค่า null เช่น xty=null
แต่จริง เท่าทีดุในโค้ด ก็ไม่น่าจะจำเป็นเท่าไหร่ครับ
เพราะขอเดาเลยครับ คุณต้องการให้มันเป็น null เพื่อจะให้ใช้ ตรวจสอบเงื่อนไขในลำดับงานต่อไปได้ ซึ่งผมเห็นแล้วว่า พอจะปรับปรุงได้

เปลี่ยน
If Not IsNull(txty) Then
เป็น
If txty<>"" or not isnull(txty) Then
มันก็ทำงานได้ปกติเหมือนเดิมครับ


ผมแนะเพิ่มอีกอย่างครับ การใช้ Select Case ของคุณ ต้องเผื่อทางถอยให้โค้ดด้วยครับ กรณีมีข้อผิดพลาดอย่างอื่นเกิดขึ้น
select case ...
case 1
case 2
case esle

end select

ควรจะมี case else ให้มันด้วยครับ เผื่อว่าในอนาคตมีเหตุการที่เราคาดไม่ถึง เกิดขึ้นแล้วโปรแกรมจะได้ไม่มีปัญหา
case else ยังมีประโยชน์ใช้ในการตั้งค่า default ของทางเลือกด้วย
เช่น ถ้าเลือก 1 ให้เปิด rp1
ถ้าเลือก 2 ให้เปิด rp2
ถ้าไม่เลือกอะไรเลยหรือพลาด กดปุ่มคำสั่งมาโดยยังไม่ได้เลือก(ไม่ได้มีเจตนาที่จะไม่เลือก) โปรแกรมเราก็ยังทำงานต่อได้ปกติ โดยมันจะไปอ่านที่ case else
ซึ่งก็เป็นการสร้างทางเลือก default โดยอัตโนมัตินั่นเอง

โปรแกรมทุกๆ โปรแกรมครับ ควรมีทางเลือกที่ยืดหยุ่นมากๆ และลดการใช้ msgbox นั่นคือคอนเซปท์ผมล่ะ อิอิ
23 @R02236
ขอบคุณครับ ท่าน yeadram


24 @R02238
สวัสดีครับท่าน yeadram ตอนนี้มีปัญหาอีกแล้วครับ แหะๆ

คือผมลองทำตามข้างบนแล้ว ปรากฎว่าพอกดเปิดรายงาน มันดันไม่มีข้อมูลใดๆ เลยครับ โดยผลลองใช้ debug.print ดัก sql ซึ่งเป็นเงื่อนไขในการเปิดรายงาน

sql = Year([start_date]) = 2004

และอีกอย่างครับ textbox txty ไม่ได้ผูกกับฟิลดใดเลยครับ

ขอบคุณครับ
25 @R02239
เรื่อง txty ข้ามไปได้เลยครับ ไม่ต้องสนมันแล้ว
เวลาสั่งล้างค่าก็เหมือนเดิมที่เคยทำนั่นแหละครับ txty=""

ตรงเงื่อนไขก็เช็คแค่ว่า if txty<>"" then
หรืออาจจะต้องเช็คเรื่องรูปแบบการป้อนอีก ว่าเป็นตัวเลขสี่หลักครบหรือไม่ เป็นปีที่มีข้อมูลหรือไม่ อันนั้นก็ว่ากันไปต่ออีกที

ปัญหาล่าสุดที่พบ คือบอกว่า ไม่มีข้อมูลออกมา ดูจาก sql แล้ว ผมคิดว่าเงื่อนไขที่เราส่งให้มัน ได้เขียนอย่างถูกต้องครบถ้วนดีแล้วนะครับ ที่มันไม่ออกมา ก็ต้องตามไปเช็ค
- มีข้อมูลของปีที่ระบุหรือไม่
- ปี 2004 ตามที่ยกตัวอย่างคือ ไป ค.ศ. แล้วในตารางเก็บข้อมูลเป็นปี ค.ศ. ด้วยหรือไม่
คือต้องไล่ตามที่ข้อมูลแล้วล่ะครับ ดูท่าทางโค้ดไม่น่าจะมีปัญหาแล้วครับ
26 @R02241
มันจะเกี่ยวกับการออกแบบรายงานของผมด้วยหรือเปล่าครับ

เพราะผมจัดกลุ่มของ start_date (ที่เป็นเงื่อนไขในคำสั่งเปิดรายงาน) เป็นสองระดับ คือ ระดับปี และ ระดับเดือน ดังรูป อ่ะครับ



และนี้คือ รายงานที่ผมต้องการโดยสมบูรณ์อ่ะครับ (capture มาจากไฟล์ excel)

27 @R02242
ส่วนนี้คือ ไฟล์รายงานแบบไม่มีเงื่อนไขครับ แค็ปมาให้ดูสองส่วนครับ ส่วนแรกคือส่วนที่ไม่มีค่าในฟิลด์ วันเริ่มทำงาน(start_date) ส่วนที่สองคือส่วนที่มีค่าในฟิลด์วันเริ่มทำงานครับ





ส่วนนี้คือขั้นตอนการทำงานของผมคือจะเลือก ตัวเลือก "ทั้งหมด" และใส่ค่าในเท้กซ์บ็อก txty น่ะครับ



และเมื่อกดปุ่ม ออกรายงาน ผลลัพธ์ที่ได้จะ็เป็นแบบนี้ครับ



ทั้งๆ ที่ัมันมีค่าในฟิลด์ start_date เป็น 2009 น่ะครับ งงครับ
28 @R02249
กด ctl+G
พิมพ์ DoCmd.OpenReport "rptnew", acViewPreview, , "year([start_date] = 2009"
วางเคอร์เซอร์ไว้ท้ายบรรทัดนั้น > กด enter > ดูผล > ปิดรายงาน

กด ctl+G
พิมพ์ DoCmd.OpenReport "rptnew", acViewPreview, , "year([start_date] = 2552"
วางเคอร์เซอร์ไว้ท้ายบรรทัดนั้น > กด enter > ดูผล > ปิดรายงาน

กด ctl+G
พิมพ์ DoCmd.OpenReport "rptnew", acViewPreview, , "[start_date] Like '*/09'"
วางเคอร์เซอร์ไว้ท้ายบรรทัดนั้น > กด enter > ดูผล > ปิดรายงาน

กด ctl+G
พิมพ์ DoCmd.OpenReport "rptnew", acViewPreview, , "[start_date] Like '*/52'"
วางเคอร์เซอร์ไว้ท้ายบรรทัดนั้น > กด enter > ดูผล > ปิดรายงาน

มีอันไหนที่ข้อมูลมันออกมาบ้างไหมครับ

29 @R02250
ขอบคุณครับ

ผมใช้ "[start_date] like '*" & txty แล้วอ่ะครับ

ได้ผลเรียบร้อย ขอบคุณครับ
30 @R07206
sumหมายถึงอะไรคับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3401s