บังคับไม่ให้ เลื่อนไป ฟิลด์ถัดไป จนกว่าจะคีย์ข้อมู
กระทู้เก่าบอร์ด อ.Yeadram

 1,752   4
URL.หัวข้อ / URL
บังคับไม่ให้ เลื่อนไป ฟิลด์ถัดไป จนกว่าจะคีย์ข้อมู

คือผมมี textbox อยู่ 2 ตัว คือ textbox1 เป็นจำนวนสินค้าที่เหลือในสต๊อก และ textbox2 เป็นจำนวนสินค้าที่จะเบิกออกไป
ผมต้องการตรวจสอบว่า
ถ้าใส่ตัวเลขใน textbox2 ซึ่งเป็นจำนวนที่จะเบิกออกไป มีค่ามากกว่า textbox1 ซึ่งเป็นจำนวนสินค้าที่เหลืออยู่ในส่ต๊อกแล้ว
ก็ให้ขึ้นข้อความเตือนแล้วใส่ข้อมูลใหม่
เพื่อป้องกันไม่ให้มีการเบิกสินค้าเกินจำนวน สินค้าที่เหลืออยู่
ผมใช้เหตุการณ์ AfterUpdate ใส่โค้ดดังนี้

Private Sub Text2_AfterUpdate()

If ([Text1] - [Text2]) < 0 Then
MsgBox "เบิกเกินจำนวนที่เหลืออยู่", 48, ""
Text2.SetFocus
End If

End Sub

ขอถาม เป็นข้อๆ ดังนี้
ข้อ 1.
ผมมักใช้ปุ่ม Tab เป็นตัวเลื่อน เคอร์เซอร์ เพื่อคีย์ข้อมูลต่อไปเรื่อยๆ
พอผมคีย์ตัวเลขผิดพลาด ที่ textbox2 ซึ่งมีค่ามากกว่า textbox1 มันก็ขึ้น msgbox เตือนขึ้นมาถูกต้องไม่มีปัญหาอะไร
ปัญหามันอยู่ที่ พอผมกด ปุ่ม OK บนกล่อง โต้ตอบ แทนที่มันจะกลับไป SetFocus ที่ Text2 เพื่อให้เราคีย์ข้อมูลที่ถูกต้อง
มันกลับเลื่อนเคอร์เซอร์ไปที่แท็บต่อไปเลย
ไม่ยอมมา SetFocus บน textbox2 ตามที่เราตั้งไว้
คำถามคือ ผมจะใช้คำสั่งไหน หรือวิธีไหนได้บ้าง ที่จะให้เคอร์เซอร์หยุดอยู่ที่ Text2 เพื่อให้เราคีย์ข้อมูลให้ถูกต้องก่อน
ถึงจะปล่อย่ให้เคอร์เซอร์ วิ่งไปที่ ข้อมูลถัดไป

ข้อ 2.
ผมลองใช้หัวข้อของ กฏการตรวจสอบ ที่ textbox2 ให้เป็น <= textbox1 มันขึ้นแปลกๆ คือ
อย่างเช่น ผมมีตัวเลขที่ textbox1 เป็น 10 ผมจะคีย์ข้อมูลใน textbox2 ได้แค่ เลข 1 กับ เลข 10 เท่านั้น
เลข 2 จนถึง 9 มันไม่ยอมให้คีย์ ทั้งที่มีค่า น้อยกว่า 10
เหมือนกับว่ามันมองเป็นตัวอักษร แล้วจับเอา ตัวเลขตัวแรกตัวเดียวมาเช็ค ไม่ได้เอาค่าทั้งจำนวนมา
แต่พอเอาค่า ทั้ง 2 textbox มาลบกัน มันก็แสดงค่าตัวเลขที่ ลบกันได้ถูกต้อง
คำถามคือ ผมจะทำอย่างไรให้ สามารถคีย์ตัวเลข ที่ น้อยกว่า textbox1 ได้คือสามารถคีย์ได้ตั้งแต่ 1-10 ได้ตามปกติ

จุดประสงค์ของ ทั้ง 2 คำถาม มีจุดประสงค์เดียวกันคือ ต้องการให้มีการคีย์ข้อมูลที่ถูกต้อง
คือคีย์ค่าที่น้อยกว่า จำนวนที่คงเหลืออยู่ในสต๊อก หากคีย์ผิดพลาด ก็ให้ขึ้นคำเตือน
แล้วกลับไปคีย์ ค่าใหม่จนกว่าจะถูกต้อง แล้วค่อย ไปทำงานใน ช่องถัดไป
รบกวนท่านอาจารย์ทั้งหลายช่วยหน่อยครับ หรือจะตอบให้ทั้ง 2 ข้อ ก็จะเป็นพระคุณอย่างสูงครับ

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

1 @R12781
เปลี่ยนไปไว้ในเหตุการณ์ Before_update ดูครับ
Private Sub Text2_BeforeUpdate(cancel as integer)
If ([Text1] - [Text2]) < 0 Then
MsgBox "เบิกเกินจำนวนที่เหลืออยู่", 48, ""
cancel=true
End If
end sub
2 @R12786
ได้แล้วครับ อาจารย์ yeadram
ขอบพระคุณ ครับ
3 @R13341
อาจารย์ yeadram ครับ
Access หากใช้เครื่อง Server ในการจัดเก็บฐานข้อมูล และใช้แบบฟอร์มลงในแต่ละเครื่องเพื่อทำการ Link ฐานข้อมูลจาก Server ใช้ภายในองค์กรเล็ก ได้ 100 เครื่อง ได้หรือเปล่าครับ ช่วยแนะนำผมทีครับ
4 @R13346
ถ้าทำเป็น ระบบ Link แค่ 10 เครื่องถ้าเปิดใช้พร้อมกันก็อืดจะแย่อยู่แล้วครับ

แต่ถ้าทำเป็นระบบ connection แบบครั้งต่อครั้ง 100 เครื่องก็สบายครับ
คือ หลักๆ ของโปรแกรมจัดการข้อมูลแล้ว มันก็มีแค่การใช้ sql สั่งทำงานนั่นแหละครับ มี Select, Insert, Delete, Update ถ้าจะมีเพิ่มเติมก็อาจจะพวก Create, Alter ซึ่งก็ถือว่าน้อย
ทุกๆ จังหวะที่เราจะสั่งการพวกนี้ (เช่นในเหตุการณ์ของปุ่มกด) เราก็ค่อยสั่งให้ทำการ connect กัน หลังทำเสร็จก็ปิด connect ออกไป แบบนี้ ก็เหมือนกับระบบเว็บไซต์ครับ ใช้ Access เป็นฐานข้อมูลบนโฮสต์ คนเข้าดูเว็บพร้อมๆ กันเป็นพันเป็นหมื่น ยังไม่เป็นปัญหาอะไรเลย (ถ้าเยอะกว่านี้ก็ไม่แน่ นะ อิอิ)

เช่น
- ถ้าจะเอาข้อมูลหลายๆ เรคคอร์ดมาให้ผู้ใช้ดู ก็อาจจะ select ข้อมูลลงมาจาก server ใส่ใน ตาราง temp ก็ได้
- ถ้าจะเพิ่มข้อมูล ก็ให้ souce ของฟอร์ม เป็น ตารางชั่วคราวไปก่อน พอกด save ค่อยทำการ connect แล้ว สั่นรัน sql ให้เพิ่มข้อมูลเข้าไปใน server แล้วก็ตัดการเชื่อมต่อทันที
เป็นต้น

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