จัดลำดับคิวงาน
กระทู้เก่าบอร์ด อ.Yeadram

 1,649   11
URL.หัวข้อ / URL
จัดลำดับคิวงาน

สอบถามอาจารย์ทุกท่านครับ

เราสามารถจะสามารถเขียนโปรแกรม ใช้ในการวางแผนของลำดับคิวงานได้ไหมครับ

ตัวอย่างเช่น

ลำดับงานที่        ชื่องาน          คิวงาน
      1              "ชื่องาน"           0 (คืองานที่กำลังปฏิบัติอยู่)
      2              "ชื่องาน "          1 (งานต่อไป)          
      3              "ชื่องาน"           2 (งานต่อไป)
      4              "ชื่องาน"           3 (งานต่อไป)

ถ้าหากเราอยากจะจัดนำงานในลำดับที่ 3 ขึ้นมา เป็น ลำดับที่ 1 (ประมานว่างานด่วนมาทำก่อนโดยจะเป็นงานต่องานที่เรากำลังปฏิบัติงานอยู่ )

โดยที่งานในลำดับที่ 1 ก่อนหน้านี้ จะขยับลงมา เป็นงาน ที่ 2 และ 3 ตามลำดับ

ประมานนี้ครับ พอจะมีวิธีแนะนำไหมครับ

โดยประเภทของข้อมูล (ชื่องาน) เป็น Text



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

1 @R23960
ถ้าเป็นผม เลขที่คิวงานที่เก็บจริง ไม่จำเป็นต้องเพิ่มทีละ 1 เหมือนอย่างที่ต้องการแสดงออกมา อาจจะเพิ่มทีละ 10 หรือ 100 หรือเท่าไหร่ก็ได้แล้วแต่ว่าโอกาสเกิดการเปลี่ยนแปลงคิวงานจะมีบ่อยสักแค่ไหน ตย.เช่น ลำดับงานที่ 1 มีเลขคิวงานเป็น 10, ..., ลำดับที่ 4 เป็น 40 อย่างกรณีที่ที่คุณต้องการ ก็แค่เปลี่ยนเลขคิวงานจาก 30 มาเป็นค่าสัก 5 ก็ได้ ถ้าต่อไปจะเอางานที่ 4 มาเป็นลำดับแรกแทนอีกที ก็เปลี่ยนจาก 40 มาเป็นค่า 2 ก็ได้ ดังนั้นเมื่อเรียงตามคิวงานแล้ว ยังไงก็ได้ลำดับตามต้องการ ส่วนการที่จะให้แสดงเลขออกมาเป็น 0,1,2,3 นั้น ใช้วิธีตามลิงค์นี้ก็ได้ครับ http://www.thai-access.com/yeadram_view.php?topic_id=2730
2 @R23961
เรียน อ.สันติสุขครับ
        ผมเข้าใจเหมือนกับที่อาจารย์บอกไว้ แต่ติดปัญหาอยู่อย่างหนึ่งครับ
        ลำดับคิวงานอาจมีมากถึง 40คิว เป็นต้น หากต้องการคิวงานที่40 มาทำก่อนโดยให้อยู่ที่คิวงานที่2 อาจารย์บอกว่าให้เปลี่ยนจากคิวงานที่40 เป็น2 สามารถทำได้ครับ แต่คิวงาน2จะไม่เป็น3อัตโนมัติครับ และคิวงานที่2จะมี2รายการ(ผมน่าจะเข้าใจถูกนะครับ) จากนั้นก็ต้องเปลี่ยนเลขคิวที่2เดิม มาเป็นคิวที่3 แล้วต้องมาไล่ใส่คิวงานตั้งแต่ 3-40 ใหม่หมดครับ
        กรณีของคุณสุวัฒน์ ต้องการให้คิวงานที่ถูกคิวอื่นมาแทนที่แล้ว เรียงลำดับใหม่ทั้งหมดอัตโนมัติ โดยที่เราไม่ต้องเปลี่ยนคิวที่เหลือเอง พอจะมีวิธีไหมครับ
3 @R23962
โค้ดเปลี่ยนลำดับคิวงานจาก a ไปเป็น b

   DoCmd.RunSQL "update เทเบิล set ฟิลด์คิวงาน = -1 where ฟิลด์คิวงาน = " + a
   DoCmd.RunSQL "update เทเบิล set ฟิลด์คิวงาน = ฟิลด์คิวงาน " + iif(a>b,"+,"-") + " 1 where ฟิลด์คิวงาน between " + a + " and " + b
   DoCmd.RunSQL "update เทเบิล set ฟิลด์คิวงาน = " + b + " where ฟิลด์คิวงาน = -1"
4 @R23963
ขออนุญาตครับ อาจารย์สันติสุข
ผมอ่านดู แล้วสนใจวิธีของอาจารย์มาก มันสั้นดี (ผมคิดไม่ได้)
เลยลองเอาไปทดสอบดู พบว่า มีจุดที่อาจารย์พิมพ์ตกด้วย
และตามที่ได้ทดสอบใน VBA ของ access 2010 ของเครื่องผมแล้ว มัน error ตรงตัวต่อสายอักขระ ที่อาจารย์ใช้เครื่องหมาย + เป็นตัวต่อข้อความ

ผมเลยเปลี่ยนเป็นเครื่องหมาย อัมเพอร์แซนด์ แทน ลองแล้วได้ผลดีครับ

โค้ดที่ผมเอาไปทดสอบ และปรับแก้แล้ว จะลบทิ้งเลย ก็เสียดาย
ขอเอามาโพสต์ต่อจากของอาจารย์นะครับ

Function ReOrder(a As Long, b As Long)
DoCmd.RunSQL "update เทเบิล set ฟิลด์คิวงาน = -1 where ฟิลด์คิวงาน = " & a
DoCmd.RunSQL "update เทเบิล set ฟิลด์คิวงาน = ฟิลด์คิวงาน " & IIf(a > b, "+", "-") & " 1 where ฟิลด์คิวงาน between " & a & " and " & b
DoCmd.RunSQL "update เทเบิล set ฟิลด์คิวงาน = " & b & " where ฟิลด์คิวงาน = -1"
End Function
5 @R23964
ใช่ ผมขาด double quote ไปตัวนึง ขอบคุณครับ
6 @R23973
ขอบคุณอาจารย์ทั้ง 2 ท่านมากๆ เลยคับ เดี๋ยวผมจะลองทำดูนะครับ

ขอบคุณมากๆครับ
7 @R23974
สอบถามอีกนิครับ ถ้าเป็น Ver. 2007 ละครับ จะติดปัยหาอะไรไหม
8 @R23977
รบกงนขอเป็นไฟล์ตัวอย่างได้มั้ยคับ เอาไปใส่แล้ว งงๆ (ยังมือใหม่อยู่คับ)
9 @R23978
คุณ yeadram ผมรบกวนขอเป็นไฟล์ตัวอย่างได้ไหมครับ เอาไปใส่แล้ว งงๆ (ยังมือใหม่อยู่ครับ)
10 @R23981
สมมุติหน้าฟอร์มคุณมีเท็กซ์บ็อกซ์ 2 ตัวชื่อ a และ b สำหรับป้อนลำดับคิวงานที่ต้องการเปลี่ยนจากลำดับไหน(a) ไปไหน(b) และมีปุ่มที่กดชื่อว่า c เพื่อให้คลิกแล้วทำการเปลี่ยน

ใน event On Click ของ c ให้เลือก Event Procedure แล้วใส่โค้ด DoCmd.... ทั้ง 3 บรรทัดของ อ.Yeadram ลงไปเท่านั้นเองครับ (โดยที่ไม่ต้องมีบรรทัด Function และ End Function)
11 @R23994
ผมทำคลิปแนะนำให้ดูนะครับทั้งแบบที่ อ. ทั้งสองท่านแนะนำ และแบบที่ผมเคยทำ

แบบที่อาจารย์แนะนำในกระทู้

แบบที่ผมเคยทำ

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