เรียนถามอาจารย์ yeadram เพิ่มเติมเรื่องการคีย์ข้อม
กระทู้เก่าบอร์ด อ.Yeadram

 1,255   6
URL.หัวข้อ / URL
เรียนถามอาจารย์ yeadram เพิ่มเติมเรื่องการคีย์ข้อม

จากโค๊ดที่อาจารย์ให้ไว้ด้านล่างนี้ หนูได้นำไปใช้งานได้เรียบร้อยแล้วค่ะ

if (Left(Text0, 1)) <> "A" Then
MsgBox " รหัสสินค้า ต้องเริ่มด้วย (A) เท่านั้น "

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

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

1 @R01068
1 ผมเห็นแย้งในวิธีการตั้งแต่ต้น
เวลาแจ้งเตือน ถ้าเรารู้ว่าต้องเป็น A ทำไมเราไม่ใส่ให้เขาไปเลย

if (Left(Text0, 1)) <> "A" Then text0 = "A" & mid(text0,2)

ก็ไม่ต้องแจ้งเตือนเลย

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

2.1 สร้างตารางไว้ 1 ตารางเก็บรหัสไว้เลยดีมั้ย เงื่อนไขการตรวจสอบ ก็ตรวจสอบโดยการ เข้าไปเช็คกับตารางดังกล่าว เมื่อต้องการเพิ่มรหัสกลุ่มใหม่ๆ ก็เพิ่มเข้าตารางได้เลย

2.2 สร้างอาเรย์เอาไว้ ในโมดูล เงื่อนไขการตรวจสอบ ก็เข้าไปตรวจกับอาเรย์ เมื่อต้องการเพิ่มรหัสกลุ่มใหม่ๆ ก็เข้าไปเพิ่มสมาชิกของอาเรย์
2 @R01070
ต่อครับ.... (ต้องทำอย่างนี้แหละครับ เน็ตผมมันหลุดบ่อย พิมพ์ยาวๆ พอจะโพสต์ เน็ตหลุด ข้อความที่เขียนหายไปหมด)

ตัวอย่างการทำตามวิธีที่ 2 การสร้าง อาเรย์ และสร้างฟังก์ชั่น ขึ้นมาไว้ใช้เอง

----- ในโมดูล --------

Function chkLead(byval c as string) as integer
Dim ar(2) as string
ar(0) = "A"
ar(1) = "B"
ar(2) = "ฮ"

' คุณสามารถมาเพิ่มสมาชิก ได้เมื่อต้องการ ระวังเรื่องจำนวนสมาชิกของอาเรย์ ตอนประกาศตัวแปร

Dim i as integer

chkLead = False
for i = 0 to ubound(ar)
if c = ar(i) then
   chkLead = true
   exit Function
end if
Next i
End function
-------------------------------------


ในฟอร์ม คุณก็เปลี่ยนคำสั่ง ในเงื่อนไขการตรวจสอบ เช่น
if chkLead(Left(Text0, 1)) =false Then _
MsgBox " รหัสสินค้า ต้องเริ่มด้วย อักขระที่กำหนดเท่านั้น"

3 @R01073
อาจารย์คะ หนูคงเลี้ยวกลับไม่ทันแล้วละค่ะ เพราะหนูใช้โครงสร้างเดิมให้ผุ้ใช้ เขาคีย์ข้อมูลไปกว่า 2500 เร็คคอร์ดแล้ว และผู้ใช้ก็เคยชินกับรูปแบบเดิมกันทั่วหน้า หนูขออนุญาตเล่ายาวหน่อยนะคะ อันที่จริงก่อนจะมาใช้โค๊ดควบคุมการคีย์ข้อมูลดังกล่าวนั้น เราก็ได้มีการอบรม
ผู้ใช้ทุกคนไว้ว่า รหัสสินค้าหมวดนี้จะต้องเริ่มด้วย A เท่านั้น(อักษรตัวอื่นก็จะใช้กับหมวดสินค้าอื่นที่แตกต่างกันไป) เหตุที่เกิดแนวคิด
ใช้โค๊ดมาควบคุมการคีย์ก็เพราะว่าผู้ใช้มักเผลอกดคีย์อักษรผิดเข้าไป โดยไม่รู้ตัว ทำให้ระบบข้อมูลสินค้าผิดพลาด ต้องมาตามแก้กันบ่อยๆ
พอมาใช้โค๊ดที่ได้จากอาจารย์ ผู้ใช้ทุกคนก็ Happy กันใหญ่ไม่ต้องเกร็งกันมากเหมือนก่อน ถ้าคีย์ผิดก็จะเตือนให้ทราบทันที
ในตอนแรกก็คุยกันว่าสินค้าแต่ละหมวด ในระยะ 5 ปีน่าจะมีไม่ถึง 1หมื่นชิ้น ก็เลยกำหนดรหัสไว้ว่าให้มีอักษรนำหน้าสัก1ตัวเพื่อ
แยกหมวดสินค้า จากนั้นก็ให้มีตัวเลขต่อท้ายอีก 4 หลัก ตอนที่ยังไม่ได้ใช้โค๊ดมาควบคุม ก็วางแผนกันไว้ว่าหากอนาคต
สินค้า แต่ละหมวดเกิดทะลุเกิน 1 หมื่น ก็จะใช้วิธีการ ปรับเปลี่ยนใช้เป็นอักษรอื่นต่อไปเช่น B,C,D เป็นต้น
แต๋พอมาใช็โค๊ดควบคุม โดยกำหนดว่าจะต้องเป็นอักษร A เท่านั้น ครั้นพอในอนาคตเมื่อถึงเวลาต้องเปลี่ยนอักษรใหม่ ระบบมันก็
จะบังคับไม่ยอมให้เปลี่ยน นอกจากจะต้องเข้าไปปรับเปลี่ยนโค๊ดกันใหม่ นี่แหละคือปัญหาที่หนูเป็นกังวลอยู่ว่าเมื่อเลี่ยนโค๊ดให้เป็นอักษร B,
แล้วอักษร A, ที่คีย์เข้าไปแล้วก็จะ Error อีกแน่นอน ก็เลยคิดกันว่าน่าจะเตรียมอักษรสำรองเอาไว้ล่วงหน้าเลย อีกสัก 1 ตัว น่าจะเกินพอ ที่จะรองรับสินค้าได้อีก 10 ปี อย่างสบายๆ
จึงอยากขอรบกวนอาจารย์ว่า หากหนูจะปรับแก้โค๊ดเดิมให้สามารถใช้อักษร B ได้อีกสักตัวเช่น "รหัสสินค้าต้องเริ่มด้วย A หรือ B เท่านั้น" ลักษณะนี้
จะต้องเขียนโค๊ดอย่างไรคะ ขออภัยที่หนูร่ายเพลงยาวไปหน่อย คือหนูกลัวอาจารย์จะไม่เข้าใจความต้องการของหนูนะค่ะ ว่าทำไมหนูต้องใช้โครงสร้างเดิมค่ะ
4 @R01074
if (Left(Text0, 1)) <> "A" or (Left(Text0, 1)) <> "B" Then
MsgBox " รหัสสินค้า ต้องเริ่มด้วย (A) หรือ (B) เท่านั้น "
5 @R01076
if (Left(Text0, 1)) <> "A" or (Left(Text0, 1)) <> "B" Then
MsgBox " รหัสสินค้า ต้องเริ่มด้วย (A) หรือ (B) เท่านั้น "

อืม..อาจารย์คะ มันไม่ Error ค่ะ แต่มันไม่ยอมให้ผ่านเลยไม่ว่าจะเป็น A หรือ B จะขึ้นเตือน " รหัสสินค้า ต้องเริ่มด้วย (A) หรือ (B) เท่านั้น " ตลอดเลยค่ะ
6 @R01077
ได้แล้วค่ะอาจารย์ หนูลองปรับแต่งแก้ไขดูอีกหน่อยดังนี้ ก็ใช้ได้เลยค่ะ

If Not (Left(Text0, 1)) = "A" And Not (Left(Text0, 1)) = "B" Then
MsgBox " รหัสสินค้า ต้องเริ่มด้วย (A) หรือ (B) เท่านั้น "

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