Code ใน VBA
กระทู้เก่าบอร์ด อ.Yeadram

 4,887   6
URL.หัวข้อ / URL
Code ใน VBA

มีเรื่องถามอย่างนึงครับ คือว่าผมสร้างฟอร์มข้อมูลพนักงานทั้งหมดเป็นแบบ Datasheet ครับ
พอดับเบิ้ลคลิกที่รหัสพนักงานก็ให้ไปโชว์หน้าฟอร์มที่มี textbox ลองรับสำหรับให้แก้ข้อมูลครับ
ทีนี้ผมก็เขียนโค๊ดโดยเก็บข้อมูลรหัสตอน login มาเปรียบเทียบกับฟอร์มที่ 2 ถ้ารหัสตอน login ตรงกับข้อมูลรหัสพนักงานในหน้าฟอร์มที่2 ก็ให้แก้ได้
แต่ถ้าไม่ตรงจะไม่สามารถแก้ได้ครับ
ทีนี้มันมีปัญหาตรงที่ว่าถ้าดับเบิ้ลคลิกจากหน้าที่ 1 ไป หน้าที่ 2 มันแก้ได้หมดเลยครับ ไม่ว่าจะใช่รหัสของตัวเองหรือเปล่า แต่ว่าถ้าผม กดเปลี่ยนหน้าฟอร์มที่ 2 เป็น Design ก่อน แล้วค่อยมาเลือกเป็น Form View มันก็จะตรวจสอบโค๊ดให้ครับว่าตรงหรือไม่ตรง ผมไม่แน่ใจว่าเป็นเพราะอะไร โดยโค๊ดที่ผมเขียนผมใส่ไว้ในฟอร์มที่ 2 ที่ Form_Load และผมลองไว้ที่ Form_Open ก็ไม่ได้เหมือนกันครับ เพราะอะไรหรอครับ


ปล.ฟอร์มที่1 คือ หน้าข้อมูลพนักงานทั้งหมด (Datasheet)
     ฟอร์มที่ 2 คือ หน้าที่มี textbox สำหรับแก้ไขข้อมูลที่เลือกมาจากหน้าที่ 1

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

1 @R02879
เป็นไปได้หลายสาเหตุครับ
ต้องลองตั้งข้อสมมติฐาน แล้วทดสอบทีละอย่าง เช่น
1 การเก็บข้อมูลตอนล็อกอินที่ว่า คุณเก็บไว้ในตัวแปรหรือเปล่า ตัวแปรดังกล่าวเป็น public หรือไม่
2 ตัวแปรดังกล่าว น่าจะถูกกำหนดค่าเพียงครั้งเดียว คือขั้นตอนการล็อกอินเท่านั้น และจะต้องไม่มีโค้ดที่ไหนๆ ที่จะไปกำหนดค่าหรือล้างค่าของมันอีก จนกว่าจะปิดโปรแกรม ดังนั้นข้อสมมติฐานคือ มีโค้ดที่ไหนๆ อื่นอีกหรือไม่ ที่ไปกำหนดค่า หรือเปลี่ยนค่า หรือล้างค่าของมัน หรือมีการประกาศตัวแปรซ้ำกับมันหรือไม่
3 ถ้าการเก็บข้อมูลดังกล่าว ไม่ได้เก็บเข้าตัวแปร public แต่เป็นการเก็บเข้าตาราง ถามว่ามีโค้ดใดๆ หรือมีคิวรี่ใดๆ ที่ไปกระทบกับตารางนั้นหรือไม่
4 ลักษณะเงื่อนไขในการเปิดฟอร์ม2 ที่ส่งมาจากเหตุการณ์ดับเบิ้ลคลิ๊กบนฟอร์ม1 นั้น เป็นอย่างไร เงื่อนไขดังกล่าว ไปกระทบกับข้อมูลการล็อกอินที่เคยเก็บไว้ก่อนหน้านี้หรือไม่
5 โค้ดการตรวจสอบเปรียบเทียบที่เขียนไว้ตอนเหตุการณ์เริ่มต้นฟอร์ม2 นั้นเขียนอย่างไร อ้างอิงค่าต่างๆ ถูกต้องหรือไม่ ลอง debug ดูค่าต่างๆ ในแต่ละคำสั่งดูว่า เป็นอย่างไร
2 @R02882
1. ตัวแปรดังกล่าวเป็น public
2. ไม่ม่การประกาศตัวแปรซ้ำ หรือเปลี่ยนค่าครับ ลองเช็คดูแล้วครับ
3. ----
4. DoCmd.OpenForm "AddPerformance", acNormal
    DoCmd.OpenForm "AddPerformance", acNormal, , "Emp_ID='" & Me.Emp_ID & "'" คือให้ดับเบิ้ลคลิกตรงรหัสพนักงานแล้วส่งค่าไปที่ ฟอร์มที่ 2 ที่มีค่ารหัสพนักงานตรงกับที่ดับเบิ้ลไปครับ

-------------------------------------------------
คือว่าผมจะเปรียบเทียบระหว่างตัวเลขกับตัวเลขครับ เช่น พนักงาน login มา จะเก็บรหัสพนักงานไว้ยกตัวอย่าง 0001 ครับ พอพนักงานคนนี้จะเข้าดูข้อมูลของพนักงานรหัสอื่น เช่น 0002 ผมจะล็อก textbox ไว้ไม่ให้ใส่ข้อมูลได้ แต่ถ้าคลิกเลือกข้อมูลที่มีรหัส 0001 ก็จะปลดล็อกครับ ผมพอจะรู้ว่าถ้าเก็บข้อมูลตอน login เป็นข้อมูลตัวอักษร เช่น duang ฟอร์ม 2 ก็จะล็อกครับเพราะมันมีค่าไม่เท่ากับรหัสพนักงานเลย แต่ถ้าเก็บเป็นตัวเลข มันไม่ล็อกให้เลยครับ

ปล. ถ้าเลือกฟอร์มที่ 2 ให้เป็น Design View ก่อน แล้วค่อยเลือก Form View อีกทีมันจะสามารถเช็คได้ครับ แต่ถ้าดับเบิ้ลคลิกฟอร์มที่ 1 เพื่อไปฟอร์มที่ 2 ก็จะไม่เช็คครับ
3 @R02883
ดูท่าทางน่าจะเป็นเพราะลำดับเหตุการณ์ในการประมวลผล ผิดลำดับล่ะครับ

- ณ ช่วงเวลาก่อนที่จะดับเบิ้ลคลิ๊กที่ฟอร์ม1   ฟอร์ม2 ถูกเปิดอยู่หรือไม่
- ได้ทดสอบ ย้ายคำสั่งไปไว้ในเหตุการณ์ลำดับอื่นๆ รองลงไปจาก form_load แล้วหรือยัง เช่น form_activate, form_resize, หรือ form_current หรือ textbox.setfocus

- ถ้าย้ายงานดังกล่าวถอยร่นลงไป จะกระทบกับงานอื่นๆ หรือเปล่า กล่าวคือ งานอื่นๆ อาจสำคัญต้องเริ่มตั้งแต่ form_open ทำให้ถอยงานนั้นลงไปด้วยไม่ได้ ทำให้การเช็ค user ไม่ทันการณ์
    ถ้าถอยร่นลำดับลงไปไม่ได้ ให้ลองวิธีใหม่ดู ครับ พอดีคิดได้อีกวิธีหนึ่ง

ตามความคาดเดาแบบไม่มีหลักการณ์ของผม ผมคิดว่า ฟอร์มของคุณมันให้ความสำคัญการ filter มากกว่า ตัวแปร public
where clause ที่คุณส่งเข้ามานั้นถือเป็น filter มันเลยไม่สนใจงานอื่นๆ เลยก็ได้ (มั้ง) ดังนั้นแทนที่เราจะส่งข้อมูลการกรอง เข้ามาในรูปของ where clause ให้ลองส่งเข้ามาในรูปของ open argument ดีมั้ยครับ

DoCmd.OpenForm ...... , cstr(Me.Emp_ID)
(อากิวร์เมนต์ สุดท้าย)

ส่วนที่ฟอร์ม 2

Form_open()
me.filter=""
dim x
x= me.opargs (เขียนถูกหรือเปล่า อิอิ)
------- สั่งทำงานกับตัวแปร public กับ textbox
------- สั่งคำสั่งอื่นๆ
me.filter = "Emp_id = '" & x & "'"
me.filteron = true
End sub

คือหมายความว่า ผมย้ายลำดับของการกรองมาไว้ เป็นงานลำดับหลังสุด เลยครับ ไม่รู้พอได้หรือเปล่า
4 @R06514
ขออนุญาติถามนิดนึงครับ

ผมสร้าางฟอร์มที่1ขึ้นมามีปุ่มสลับอยู่หลายปุ่ม
แล้วผมก็สร้างฟร์อมที่ 2 ขึ้นมามี text box อยู่
ผมต้องการให้คลิ๊กปุ่มสลับปุ่มใดปุ่มนึงขึ้นมาแล้วเปิดฟร์อมที่ 2
โดยมีเงื่อนไขว่า ถ้าปุ่มสลับปุ่มใดปุ่มนึงใน form ที่1 ถูก คลิ๊กให้เปิดฟร์อมที่ 2
แล้ว text box ใน form ที่ 2 ต้องปราฏดข้อความเมื่อปุ่มใน form ที่ 1 ถูกคลิ๊ก
หมายความว่า แต่ละปุ่มใน form ที่ 1 เมื่อคลิ๊กไปแล้วข้อความที่ปรากฏใน from ที่ 2 จะไม่เหมือนกัน
รบกวนผู้ที่ความรู้เรื่องนี้ช่วยทีครับ
มันทำยังไงเหรอครับ
5 @R06517
sub toggle1() เลือกใช้เหตุการณ์ที่เหมาะสมเอาเอง
docmd.openform "form2"
forms("form2").controls("textbox")=toggle1.caption
end sub
6 @R10992
สอบถามครับ
ผมมี Qry ชื่อ QPC จะมีตาราง CO,PART,Date ผมสร้างฟอร์ม 1 ฟอร์ม ประกอบด้วย Textbox ชื่อ TCO และมี Listbox ชื่อ ListA ผมต้องการให้ ListA แสดงรายการจาก Qry ที่ Fild CO ตรงกับ Textbox
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3292s