กระทู้เก่าบอร์ด อ.Yeadram
6,097 30
URL.หัวข้อ /
URL
เรื่องรายงานครับ
สวัสดีครับทุกท่าน
วันนี้ผมมีคำถามเกี่ยวกับเรื่องรายงานครับ
คือผมได้ทำรายงานใน access แล้วต้องการให้ลำดับที่มันรันอัตโนมัติอ่ะครับ ผมได้ลองใส่ ตรง record source ของ textbox อ่ะครับเป็น =1 ปรากฏว่าตอนรันจริงๆ มันขึ้น 1 มาหมดทุกอันเลยครับ ผมใส่ตรงไหนผิดหรือเปล่าครับหรือว่าต้องเพิ่มตรงไหนซักแห่ง
อีกอย่างคือ ผมต้องการเรียกรายงานโดยใช้เงื่อนไขเป็นเดือน คือประมาณว่า ถ้าผมต้องการรายงานของเดือนมกราคม ผมสามารถใช้ field ที่เป็น format มาแล้วได้หรือเปล่าครับ หรือถ้าไม่ได้ ผมจะใช้เป็น Between จะได้หรือเปล่า และ Between ผมต้องประกาศยังไงอ่ะครับ ผมลองใช้เครื่องหมาย # ใส่ปิดหน้าหลังของวันที่แล้ว ปรากฎว่า มันไม่ขึ้นมาตามที่ต้องการอ่ะครับ
ช่วยหน่อยครับ ขอบคุณครับ
วันนี้ผมมีคำถามเกี่ยวกับเรื่องรายงานครับ
คือผมได้ทำรายงานใน 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
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 นั่นคือคอนเซปท์ผมล่ะ อิอิ
ลองตั้งค่า
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 ไม่ได้ผูกกับฟิลดใดเลยครับ
ขอบคุณครับ
คือผมลองทำตามข้างบนแล้ว ปรากฎว่าพอกดเปิดรายงาน มันดันไม่มีข้อมูลใดๆ เลยครับ โดยผลลองใช้ debug.print ดัก sql ซึ่งเป็นเงื่อนไขในการเปิดรายงาน
sql = Year([start_date]) = 2004
และอีกอย่างครับ textbox txty ไม่ได้ผูกกับฟิลดใดเลยครับ
ขอบคุณครับ
25 @R02239
เรื่อง txty ข้ามไปได้เลยครับ ไม่ต้องสนมันแล้ว
เวลาสั่งล้างค่าก็เหมือนเดิมที่เคยทำนั่นแหละครับ txty=""
ตรงเงื่อนไขก็เช็คแค่ว่า if txty<>"" then
หรืออาจจะต้องเช็คเรื่องรูปแบบการป้อนอีก ว่าเป็นตัวเลขสี่หลักครบหรือไม่ เป็นปีที่มีข้อมูลหรือไม่ อันนั้นก็ว่ากันไปต่ออีกที
ปัญหาล่าสุดที่พบ คือบอกว่า ไม่มีข้อมูลออกมา ดูจาก sql แล้ว ผมคิดว่าเงื่อนไขที่เราส่งให้มัน ได้เขียนอย่างถูกต้องครบถ้วนดีแล้วนะครับ ที่มันไม่ออกมา ก็ต้องตามไปเช็ค
- มีข้อมูลของปีที่ระบุหรือไม่
- ปี 2004 ตามที่ยกตัวอย่างคือ ไป ค.ศ. แล้วในตารางเก็บข้อมูลเป็นปี ค.ศ. ด้วยหรือไม่
คือต้องไล่ตามที่ข้อมูลแล้วล่ะครับ ดูท่าทางโค้ดไม่น่าจะมีปัญหาแล้วครับ
เวลาสั่งล้างค่าก็เหมือนเดิมที่เคยทำนั่นแหละครับ txty=""
ตรงเงื่อนไขก็เช็คแค่ว่า if txty<>"" then
หรืออาจจะต้องเช็คเรื่องรูปแบบการป้อนอีก ว่าเป็นตัวเลขสี่หลักครบหรือไม่ เป็นปีที่มีข้อมูลหรือไม่ อันนั้นก็ว่ากันไปต่ออีกที
ปัญหาล่าสุดที่พบ คือบอกว่า ไม่มีข้อมูลออกมา ดูจาก sql แล้ว ผมคิดว่าเงื่อนไขที่เราส่งให้มัน ได้เขียนอย่างถูกต้องครบถ้วนดีแล้วนะครับ ที่มันไม่ออกมา ก็ต้องตามไปเช็ค
- มีข้อมูลของปีที่ระบุหรือไม่
- ปี 2004 ตามที่ยกตัวอย่างคือ ไป ค.ศ. แล้วในตารางเก็บข้อมูลเป็นปี ค.ศ. ด้วยหรือไม่
คือต้องไล่ตามที่ข้อมูลแล้วล่ะครับ ดูท่าทางโค้ดไม่น่าจะมีปัญหาแล้วครับ
26 @R02241
มันจะเกี่ยวกับการออกแบบรายงานของผมด้วยหรือเปล่าครับ
เพราะผมจัดกลุ่มของ start_date (ที่เป็นเงื่อนไขในคำสั่งเปิดรายงาน) เป็นสองระดับ คือ ระดับปี และ ระดับเดือน ดังรูป อ่ะครับ
และนี้คือ รายงานที่ผมต้องการโดยสมบูรณ์อ่ะครับ (capture มาจากไฟล์ excel)
เพราะผมจัดกลุ่มของ start_date (ที่เป็นเงื่อนไขในคำสั่งเปิดรายงาน) เป็นสองระดับ คือ ระดับปี และ ระดับเดือน ดังรูป อ่ะครับ
และนี้คือ รายงานที่ผมต้องการโดยสมบูรณ์อ่ะครับ (capture มาจากไฟล์ excel)
27 @R02242
ส่วนนี้คือ ไฟล์รายงานแบบไม่มีเงื่อนไขครับ แค็ปมาให้ดูสองส่วนครับ ส่วนแรกคือส่วนที่ไม่มีค่าในฟิลด์ วันเริ่มทำงาน(start_date) ส่วนที่สองคือส่วนที่มีค่าในฟิลด์วันเริ่มทำงานครับ
ส่วนนี้คือขั้นตอนการทำงานของผมคือจะเลือก ตัวเลือก "ทั้งหมด" และใส่ค่าในเท้กซ์บ็อก txty น่ะครับ
และเมื่อกดปุ่ม ออกรายงาน ผลลัพธ์ที่ได้จะ็เป็นแบบนี้ครับ
ทั้งๆ ที่ัมันมีค่าในฟิลด์ start_date เป็น 2009 น่ะครับ งงครับ
ส่วนนี้คือขั้นตอนการทำงานของผมคือจะเลือก ตัวเลือก "ทั้งหมด" และใส่ค่าในเท้กซ์บ็อก 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 > ดูผล > ปิดรายงาน
มีอันไหนที่ข้อมูลมันออกมาบ้างไหมครับ
พิมพ์ 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 แล้วอ่ะครับ
ได้ผลเรียบร้อย ขอบคุณครับ
ผมใช้ "[start_date] like '*" & txty แล้วอ่ะครับ
ได้ผลเรียบร้อย ขอบคุณครับ
30 @R07206
sumหมายถึงอะไรคับ
Time: 0.3259s
นี้คือตัวอย่างโค้ดที่เพิ่มเติมครับ ตอนนี้ มีสิ่งที่ผมเพิ่มเข้าคือไป มี 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 ได้
อาจจะมั่วๆ ครับ ขอโทษน่ะครับ และขอบคุณครับ