สมัครสมาชิก
 

จะทำฟอร์มจัดเก็บเอกสารโดยเรียงลำดับ ตามปี และเดือน ได้อย่างไรครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

09 เม.ย. 62 , 11:28:25
อ่าน 219 ครั้ง

Eik Q Sang

ผมจะเขียนฟอร์มกรอกข้อมูลเอกสาร โดยมีรายละเอียด ดังนี้ครับ

ตู้เอกสาร มีทั้งหมด 5 ชั้น ในแต่ละชั้น มี 12 บล็อค  ดังนี้

ชั้นของเอกสาร กำหนดให้ชั้นบนสุดเป็นชั้นที่ 1 ชั้นถัดลงมาคือ 2,3,4,5 โดยกำหนดปีตามชั้นดังนี้
ชั้นบนสุดหรือชั้นที่ 1 กำหนดให้เป็น ปี 2559
ชั้นถัดลงมาหรือชั้นที่ 2 กำหนดให้เป็น ปี 2560
ชั้นถัดลงมาหรือชั้นที่ 3 กำหนดให้เป็น ปี 2561
ชั้นถัดลงมาหรือชั้นที่ 4 กำหนดให้เป็น ปี 2562
ชั้นถัดลงมาหรือชั้นที่ 5 กำหนดให้เป็น ปี 2563

ในแต่ละชั้นมีบล็อคทั้งหมด 12 บล็อค โดยกำหนดเป็นเดือน ดังนี้
บล็อคที่ 1 กำหนดให้เป็นเดือน มกราคม
บล็อคที่ 2 กำหนดให้เป็นเดือน กุมภาพันธ์
ไปเรื่อยๆจนถึงบล็อคที่ 12 กำหนดให้เป็นเดือน ธันวาคม

โดยผมจะต้องบันทึกข้อมูลเอกสารในแต่ละชิ้นตามปีและเดือนโดยในแต่ละเดือนก็จะต้องเรียงตามลำดับด้วย

เช่น ในชั้นที่ 5 คือปี 2563 บล็อคที่ 1 คือเดือนมกราคม โดยผมจะเรียงเอกสารตามลำดับหรือ Sequence ไว้

โดยฟิลด์ที่กรอกประกอบด้วยฟิลด์ดังนี้
Year - ปี  เป็น ComboBox
Month - เดือน เป็น ComboBox
Sequence - ลำดับ
DocNo - เลขที่เอกสาร
CustomerNo - เลขที่ลูกค้า
CustomerName - ชื่อลูกค้า

ผมจะยกตัวอย่างนะครับ เช่น
เอกสารฉบับที่ 1
Year - 2559
Month - มกราคม
Sequence - 1
DocNo - 001
CustomerNo -01
CustomerName - นาย ก

เอกสารฉบับที่ 2
Year - 2563
Month - มกราคม
Sequence - 1
DocNo - 010
CustomerNo -05
CustomerName - นาย จ

เอกสารฉบับที่ 3
Year - 2559 
Month - มกราคม
Sequence - 2
DocNo - 002
CustomerNo -02
CustomerName - นาย ข

ฉะนั้น ในปี 2559 เดือนมกราคม จะมีเอกสาร
DocNo - 001
Sequence - 1

DocNo - 002
Sequence - 2

ผมต้องการให้เรียง Sequence Auto ตามปีและเดือนครับ

อยากสอบถามว่าจะต้องทำอย่างไรบ้างเพื่อให้ Sequence เรียงลำดับอัตโนมัติตามปีและเดือนนั้นๆ ครับ ขอบคุณมากครับผม

 

09 เม.ย. 62 , 17:36:56
ตอบกลับ #1

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 265
  • พลังขอบคุณ: 243

  • มรรคมีองค์ 8 คือ 1 Method ที่มีครบ 8 Parameters

    • ดูรายละเอียด

ใส่โค้ดนี้ไว้ใน Before Update event procedure ของฟอร์มครับ

โค๊ด: [Select]
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Nz(Me.Sequence, "") <> "" Then Exit Sub
   
    Me.Sequence = Nz(DMax("Sequence", "ชื่อเทเบิล", "Year = " & CStr(Me.Year) & " and Month = " & CStr(Me.Month)), 0) + 1
End Sub

ในโค้ดนี้ ถ้าช่อง Sequence ไม่ได้ใส่ค่าอะไรไว้ เมื่อทำการบันทึกเรคอร์ด โปรแกรมจะไปหาค่าถัดจากค่าสูงสุดที่หาได้ในปีและเดือนตามที่ป้อนในหน้าฟอร์ม แต่ถ้ามีค่า Sequence อยู่บนหน้าฟอร์มแล้ว โปรแกรมก็จะไม่ค้นหาให้ ก็ถือว่าใช้ค่าที่อยู่บนหน้าฟอร์มนั้นเลย

ยังไงก็ตาม ต้องระวังเกี่ยวกับการลบเรคอร์ดแล้วทำให้ค่า Sequence นั้นแหว่งไปด้วยนะครับ
ช่วยพกถุงผ้า หรือถุงพลาสติกที่สะอาดและผ่านการใช้มาแล้ว ไปซื้อของเพื่อลดการใช้พลาสติก ลดขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อเป็นการสนับสนุนเวปบอร์ดให้สามารถอยู่บริการเป็นแหล่งความรู้ไปได้นานๆ
 
โพสต์นี้ได้รับคำขอบคุณจาก: Eik Q Sang

10 เม.ย. 62 , 09:13:16
ตอบกลับ #2

Eik Q Sang

ใส่โค้ดนี้ไว้ใน Before Update event procedure ของฟอร์มครับ

โค๊ด: [Select]
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Nz(Me.Sequence, "") <> "" Then Exit Sub
   
    Me.Sequence = Nz(DMax("Sequence", "ชื่อเทเบิล", "Year = " & CStr(Me.Year) & " and Month = " & CStr(Me.Month)), 0) + 1
End Sub

ในโค้ดนี้ ถ้าช่อง Sequence ไม่ได้ใส่ค่าอะไรไว้ เมื่อทำการบันทึกเรคอร์ด โปรแกรมจะไปหาค่าถัดจากค่าสูงสุดที่หาได้ในปีและเดือนตามที่ป้อนในหน้าฟอร์ม แต่ถ้ามีค่า Sequence อยู่บนหน้าฟอร์มแล้ว โปรแกรมก็จะไม่ค้นหาให้ ก็ถือว่าใช้ค่าที่อยู่บนหน้าฟอร์มนั้นเลย

ยังไงก็ตาม ต้องระวังเกี่ยวกับการลบเรคอร์ดแล้วทำให้ค่า Sequence นั้นแหว่งไปด้วยนะครับ

ขอบพระคุณมากครับอาจารย์สันติสุขครับ

 

10 เม.ย. 62 , 09:36:35
ตอบกลับ #3

Eik Q Sang

ใส่โค้ดนี้ไว้ใน Before Update event procedure ของฟอร์มครับ

โค๊ด: [Select]
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Nz(Me.Sequence, "") <> "" Then Exit Sub
   
    Me.Sequence = Nz(DMax("Sequence", "ชื่อเทเบิล", "Year = " & CStr(Me.Year) & " and Month = " & CStr(Me.Month)), 0) + 1
End Sub

ในโค้ดนี้ ถ้าช่อง Sequence ไม่ได้ใส่ค่าอะไรไว้ เมื่อทำการบันทึกเรคอร์ด โปรแกรมจะไปหาค่าถัดจากค่าสูงสุดที่หาได้ในปีและเดือนตามที่ป้อนในหน้าฟอร์ม แต่ถ้ามีค่า Sequence อยู่บนหน้าฟอร์มแล้ว โปรแกรมก็จะไม่ค้นหาให้ ก็ถือว่าใช้ค่าที่อยู่บนหน้าฟอร์มนั้นเลย

ยังไงก็ตาม ต้องระวังเกี่ยวกับการลบเรคอร์ดแล้วทำให้ค่า Sequence นั้นแหว่งไปด้วยนะครับ

เกิดเออเร่ออ่าคับอาจารย์สันติสุข

https://www.thai-access.com/tiupld/images/ppq4jx-3cf4e4.jpg[/img]] link

 

10 เม.ย. 62 , 11:56:39
ตอบกลับ #4

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 265
  • พลังขอบคุณ: 243

  • มรรคมีองค์ 8 คือ 1 Method ที่มีครบ 8 Parameters

    • ดูรายละเอียด

1. Error บอกว่ายังไง
2. คอนโทรลของ Year และ Month บนหน้าฟอร์มชื่อว่าอะไร
3. ฟิลด์ Year และ Month ในเทเบิล มี Data Type เป็นอะไร
ช่วยพกถุงผ้า หรือถุงพลาสติกที่สะอาดและผ่านการใช้มาแล้ว ไปซื้อของเพื่อลดการใช้พลาสติก ลดขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อเป็นการสนับสนุนเวปบอร์ดให้สามารถอยู่บริการเป็นแหล่งความรู้ไปได้นานๆ
 

10 เม.ย. 62 , 14:50:23
ตอบกลับ #5

Eik Q Sang

1. Error บอกว่ายังไง
2. คอนโทรลของ Year และ Month บนหน้าฟอร์มชื่อว่าอะไร
3. ฟิลด์ Year และ Month ในเทเบิล มี Data Type เป็นอะไร

1. Error บอกว่ายังไง
ตามรูปด้านล่างครับอาจารย์


2. คอนโทรลของ Year และ Month บนหน้าฟอร์มชื่อว่าอะไร
ชื่อ Years กับ Months ครับอาจารย์
3. ฟิลด์ Year และ Month ในเทเบิล มี Data Type เป็นอะไร
เป็น Text ครับอาจารย์

 

10 เม.ย. 62 , 15:38:17
ตอบกลับ #6

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 265
  • พลังขอบคุณ: 243

  • มรรคมีองค์ 8 คือ 1 Method ที่มีครบ 8 Parameters

    • ดูรายละเอียด

Error อะไรไม่ได้บอก งั้นก็เดาเอาตามนี้แล้วกัน อีกอย่าง ชื่อฟิลด์ที่บอกมาในโพสแรกบอกชื่อ Year กับ Month ไม่มี s แต่ในโค้ดที่คุณเขียนกลับมี s ก็ไปแก้ตำแหน่งสีแดงให้ถูกต้องเองแล้วกันนะครับว่ามี s หรือไม่มี s

Me.Sequence = Nz(DMax("Sequence", "ชื่อเทเบิล", "Years = '" & Me.Years & "' and Months = '" & Me.Months & "' "), 0) + 1

ช่วยพกถุงผ้า หรือถุงพลาสติกที่สะอาดและผ่านการใช้มาแล้ว ไปซื้อของเพื่อลดการใช้พลาสติก ลดขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อเป็นการสนับสนุนเวปบอร์ดให้สามารถอยู่บริการเป็นแหล่งความรู้ไปได้นานๆ
 
โพสต์นี้ได้รับคำขอบคุณจาก: Eik Q Sang

10 เม.ย. 62 , 16:41:08
ตอบกลับ #7

Eik Q Sang

Error อะไรไม่ได้บอก งั้นก็เดาเอาตามนี้แล้วกัน อีกอย่าง ชื่อฟิลด์ที่บอกมาในโพสแรกบอกชื่อ Year กับ Month ไม่มี s แต่ในโค้ดที่คุณเขียนกลับมี s ก็ไปแก้ตำแหน่งสีแดงให้ถูกต้องเองแล้วกันนะครับว่ามี s หรือไม่มี s

Me.Sequence = Nz(DMax("Sequence", "ชื่อเทเบิล", "Years = '" & Me.Years & "' and Months = '" & Me.Months & "' "), 0) + 1

ขอบคุณมากครับผม

 

12 เม.ย. 62 , 13:52:44
ตอบกลับ #8

Eik Q Sang

ยังไม่ได้ครับ ไม่รันลำดับให้อ่าครับ - -*

 


บอร์ดเรียนรู้ Access สำหรับคนไทย