กระทู้เก่าบอร์ด อ.Yeadram
13,531 7
URL.หัวข้อ /
URL
ต้องการให้เลือก combo box แล้ว โชว์ใน textbox เพื่
อ่านกระทู้เก่าๆหมดแล้วครับ
แต่เนื่องจากว่า ผมไม่มีความรู้ด้าน access เลยครับ ผมเลยไม่เข้าใจ
ตัวอย่าง table นะครับ
สี เลข
แดง 1
เขียว 2
ฟ้า 3
ผมสร้าง combo box โดยใช้ Wizard โดยให้แสดง ใน คอลัมน์สีครับ(จำเป็นต้องเก็บค่าหรือเปล่าครับ โปรแกรมผมแค่นำไปคำนวณ ไม่ต้องการค่าครับ)
จากนั้น ผมสร้าง text box มา เพื่อให้ โชว์ ช่องในคอลัมน์ เลข อ่ะครับ
แต่ผมไม่รู้ว่าต้อง set ค่ายังไง ใส่ code ที่ไหน row source กับ control source ต่างกันยังไง
ช่วยอธิบายแบบค่อนข้างละเอียดให้หน่อยครับ
เพราะว่าผมไม่มีความรู้เลยจริงๆ
ปล.V.2007 นะครับ
การใส่ code นี่ใช่ คลิกขวาแล้ว Build Event ป่าวครับ
แล้วถ้าต้องการให้ เปลี่ยน combo box แล้ว
รูปเปลี่ยนตามนี่ ทำไงอ่ะครับ
ขอบคุณมากครับ
ขอบคุณครับ
แต่เนื่องจากว่า ผมไม่มีความรู้ด้าน access เลยครับ ผมเลยไม่เข้าใจ
ตัวอย่าง table นะครับ
สี เลข
แดง 1
เขียว 2
ฟ้า 3
ผมสร้าง combo box โดยใช้ Wizard โดยให้แสดง ใน คอลัมน์สีครับ(จำเป็นต้องเก็บค่าหรือเปล่าครับ โปรแกรมผมแค่นำไปคำนวณ ไม่ต้องการค่าครับ)
จากนั้น ผมสร้าง text box มา เพื่อให้ โชว์ ช่องในคอลัมน์ เลข อ่ะครับ
แต่ผมไม่รู้ว่าต้อง set ค่ายังไง ใส่ code ที่ไหน row source กับ control source ต่างกันยังไง
ช่วยอธิบายแบบค่อนข้างละเอียดให้หน่อยครับ
เพราะว่าผมไม่มีความรู้เลยจริงๆ
ปล.V.2007 นะครับ
การใส่ code นี่ใช่ คลิกขวาแล้ว Build Event ป่าวครับ
แล้วถ้าต้องการให้ เปลี่ยน combo box แล้ว
รูปเปลี่ยนตามนี่ ทำไงอ่ะครับ
ขอบคุณมากครับ
ขอบคุณครับ
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R04702
cmb1 เมื่อมี Rowsource อยู่แล้ว และเท่าที่อ่านก็คือ คุณมีข้อมูลให้มัน 2 คอลัมภ์
คอลัมภ์ที่ 1 คือ ID
คอลัมภ์ที่ 2 คือ Color
ดังนั้นเมื่อต้องการ ให้แสดง color ใน textbox (ชื่อ txt1) คุณก็เขียนอย่างนั้นแหละครับถูกแล้ว
txt1 = Cmb1.column(1) *นับคอลัมภ์เริ่มจาก 0
ทีนี้ถามว่า "textbox มันจะรู้ได้ยังไง ว่าคอลัมภ์1 เป็นข้อมูลมาจากตารางไหน"
ตอบดังนี้ครับ "มันไม่รู้ครับ มันไม่จำเป็นต้องรู้ลึกขนาดนั้นครับ มันรู้แค่ว่า คอมโบมีกี่คอลัมภ์ คอลัมภ์ที่1 เป็นอะไร คอลัมภ์ที่2 เป็นอะไร แค่นี้หมดหน้าที่มันแล้วครับ มันสามารถนำข้อมูลมาโชว์ได้ตามสั่งแล้ว"
ต่อมา มีคำถามอีกว่า "control source ของ Textbox จำเป็นต้องมีหรือไม่"
ตอบดังนี้ครับ
- ถ้าคุณแค่ต้องการให้ Textbox แสดงข้อมูล ก็ไม่จำเป็นต้องระบุ controlsource ให้มันครับ มันจะทำหน้าที่แค่ โชว์ข้อมูลให้ user เห็นเท่านั้น แก้ไขได้แต่ไม่บันทึก หรือไม่จดจำอะไรเลย หรือเราอาจจะเรียกคอนโทรลประเภทนี้ว่า Unbound Control (คอนโทรลที่ไม่ผูกกับวัตถุใดๆ)
- แต่ถ้าต้องการให้มันบันทึกลงในตาราง ก็ต้องระบุชื่อฟิลด์ลงไปใน controlsource ของมัน โดย มีข้อแม้ ข้อจำกัดว่า ชื่อฟิลด์ที่คุณนำมาใช้ ต้องเป็นสมาชิกของ แหล่งข้อมูลของฟอร์มนั้นๆ คือ ถ้าฟอร์มมีแหล่งข้อมูล (อาจจะมาจากตารางทั้งตาราง หรือมาจากคิวรี่ก็ได้) ข้อมูลเหล่านั้นจะมาในรูปเรคคอร์ดซึ่งใน 1 เรคคอร์ดก็จะมีฟิลด์ (มี 1ฟิลด์, 2ฟิลด์ หรือหลายๆ ฟิลด์ก็ได้ แต่อย่างน้อยๆ ต้องมี 1 ฟิลด์) นั่นแหละครับ ชื่อฟิลด์เหล่านั้น ที่คุณสามารถนำมาใส่ให้ control source ของ textbox ในฟอร์มนั้นได้ (ต้องใช้แค่ ฟิลด์เดียว ต่อ 1 control) ซึ่งกรณีนี้เราจะเรียก textbox ตัวนี้ว่า Bound Control
ซึ่งถ้า คอนโทรล มีการผูกกับฟิลด์ข้อมูลดังกล่าวนี้ จะมีคุณสมบัติ ทั้ง โชว์ข้อมูล รับค่าข้อมูลใหม่ , บันทึกข้อมูล และ แก้ไขข้อมูลได้ และมันจะจำข้อมูลเหล่านั้นทันที โดยเอาไปเก็บไว้ที่แหล่งข้อมูลต้นทางของฟอร์ม เช่นถ้าแหล่งข้อมูลของฟอร์มมาจากตาราง A เมื่อ Textbox มีข้อมูลใหม่ๆ หรือมีการแก้ไขข้อมูล ข้อมูลเหล่านั้นก็จะไปปรากฎใน ตาราง A ทันที
สรุป คำตอบสำหรับคำถามนี้ก็คือ คุณจะใส่ control source ให้ Textbox ของคุณหรือไม่ ก็แล้วแต่ความต้องการ ความจำเป็นของงานคุณเองครับ
อีกนิดหนึ่ง ถ้ากรณีคุณสร้างฟอร์มแบบไม่มีแหล่งข้อมูล คือสร้างฟอร์มเปล่า textbox หรือคอนโทรลใดๆ ก็ตามที่คุณสร้างขึ้น ก็จะเป็น Unbound control โดยอัตโนมัติครับ ไม่สามารถผูกกับฟิลด์ใดๆ ได้เลย และอย่าคิดไปฝืนมันล่ะ อย่าพยามใส่ชื่อฟิลด์ สิ่งที่ใส่ได้ คือนิพจน์เท่านั้นครับ
อีกคำถามหนึ่ง
เรื่องการเก็บรูป หรือการโชว์รูป โดยเลือกสั่งหรือเลื่อกเปลี่ยนการแสดงผลของรูปผ่านคอมโบ มันเป็นอีกเรื่องที่อธิบายยาวอีกหน่อยครับ แนะนำขั้นต้นคือ ให้ค้นหากระทู้เก่าๆ ก่อนครับ มีวิธีการหลายวิธี และมีโค้ดตัวอย่างหลายโค้ดครับ
คอลัมภ์ที่ 1 คือ ID
คอลัมภ์ที่ 2 คือ Color
ดังนั้นเมื่อต้องการ ให้แสดง color ใน textbox (ชื่อ txt1) คุณก็เขียนอย่างนั้นแหละครับถูกแล้ว
txt1 = Cmb1.column(1) *นับคอลัมภ์เริ่มจาก 0
ทีนี้ถามว่า "textbox มันจะรู้ได้ยังไง ว่าคอลัมภ์1 เป็นข้อมูลมาจากตารางไหน"
ตอบดังนี้ครับ "มันไม่รู้ครับ มันไม่จำเป็นต้องรู้ลึกขนาดนั้นครับ มันรู้แค่ว่า คอมโบมีกี่คอลัมภ์ คอลัมภ์ที่1 เป็นอะไร คอลัมภ์ที่2 เป็นอะไร แค่นี้หมดหน้าที่มันแล้วครับ มันสามารถนำข้อมูลมาโชว์ได้ตามสั่งแล้ว"
ต่อมา มีคำถามอีกว่า "control source ของ Textbox จำเป็นต้องมีหรือไม่"
ตอบดังนี้ครับ
- ถ้าคุณแค่ต้องการให้ Textbox แสดงข้อมูล ก็ไม่จำเป็นต้องระบุ controlsource ให้มันครับ มันจะทำหน้าที่แค่ โชว์ข้อมูลให้ user เห็นเท่านั้น แก้ไขได้แต่ไม่บันทึก หรือไม่จดจำอะไรเลย หรือเราอาจจะเรียกคอนโทรลประเภทนี้ว่า Unbound Control (คอนโทรลที่ไม่ผูกกับวัตถุใดๆ)
- แต่ถ้าต้องการให้มันบันทึกลงในตาราง ก็ต้องระบุชื่อฟิลด์ลงไปใน controlsource ของมัน โดย มีข้อแม้ ข้อจำกัดว่า ชื่อฟิลด์ที่คุณนำมาใช้ ต้องเป็นสมาชิกของ แหล่งข้อมูลของฟอร์มนั้นๆ คือ ถ้าฟอร์มมีแหล่งข้อมูล (อาจจะมาจากตารางทั้งตาราง หรือมาจากคิวรี่ก็ได้) ข้อมูลเหล่านั้นจะมาในรูปเรคคอร์ดซึ่งใน 1 เรคคอร์ดก็จะมีฟิลด์ (มี 1ฟิลด์, 2ฟิลด์ หรือหลายๆ ฟิลด์ก็ได้ แต่อย่างน้อยๆ ต้องมี 1 ฟิลด์) นั่นแหละครับ ชื่อฟิลด์เหล่านั้น ที่คุณสามารถนำมาใส่ให้ control source ของ textbox ในฟอร์มนั้นได้ (ต้องใช้แค่ ฟิลด์เดียว ต่อ 1 control) ซึ่งกรณีนี้เราจะเรียก textbox ตัวนี้ว่า Bound Control
ซึ่งถ้า คอนโทรล มีการผูกกับฟิลด์ข้อมูลดังกล่าวนี้ จะมีคุณสมบัติ ทั้ง โชว์ข้อมูล รับค่าข้อมูลใหม่ , บันทึกข้อมูล และ แก้ไขข้อมูลได้ และมันจะจำข้อมูลเหล่านั้นทันที โดยเอาไปเก็บไว้ที่แหล่งข้อมูลต้นทางของฟอร์ม เช่นถ้าแหล่งข้อมูลของฟอร์มมาจากตาราง A เมื่อ Textbox มีข้อมูลใหม่ๆ หรือมีการแก้ไขข้อมูล ข้อมูลเหล่านั้นก็จะไปปรากฎใน ตาราง A ทันที
สรุป คำตอบสำหรับคำถามนี้ก็คือ คุณจะใส่ control source ให้ Textbox ของคุณหรือไม่ ก็แล้วแต่ความต้องการ ความจำเป็นของงานคุณเองครับ
อีกนิดหนึ่ง ถ้ากรณีคุณสร้างฟอร์มแบบไม่มีแหล่งข้อมูล คือสร้างฟอร์มเปล่า textbox หรือคอนโทรลใดๆ ก็ตามที่คุณสร้างขึ้น ก็จะเป็น Unbound control โดยอัตโนมัติครับ ไม่สามารถผูกกับฟิลด์ใดๆ ได้เลย และอย่าคิดไปฝืนมันล่ะ อย่าพยามใส่ชื่อฟิลด์ สิ่งที่ใส่ได้ คือนิพจน์เท่านั้นครับ
อีกคำถามหนึ่ง
เรื่องการเก็บรูป หรือการโชว์รูป โดยเลือกสั่งหรือเลื่อกเปลี่ยนการแสดงผลของรูปผ่านคอมโบ มันเป็นอีกเรื่องที่อธิบายยาวอีกหน่อยครับ แนะนำขั้นต้นคือ ให้ค้นหากระทู้เก่าๆ ก่อนครับ มีวิธีการหลายวิธี และมีโค้ดตัวอย่างหลายโค้ดครับ
3 @R04706
ขอช่วยแนะนำนำครับ
จุดที่ 1
เขียนอ้างชื่อ combobox คุณลองเขียนในแบบนี้นะครับ
เริ่มจาก
Me.
มันจะขี้นชื่อControl ที่มีอยู่ให้(ตามภาพครับ)
จะบอกว่าคุณเขียนชื่อCombobox ผิดครับ อิอิ
จุดที่สองตามที่อ.yeadram แนะนำ
txt1 = Cmb1.column(1) *นับคอลัมภ์เริ่มจาก 0
จุดที่ 1
เขียนอ้างชื่อ combobox คุณลองเขียนในแบบนี้นะครับ
เริ่มจาก
Me.
มันจะขี้นชื่อControl ที่มีอยู่ให้(ตามภาพครับ)
จะบอกว่าคุณเขียนชื่อCombobox ผิดครับ อิอิ
จุดที่สองตามที่อ.yeadram แนะนำ
txt1 = Cmb1.column(1) *นับคอลัมภ์เริ่มจาก 0
4 @R04707
ลืมภาพ
ที่คุณเขียนไว้ระบุ column ผิดครับ อิอิ
แนะนำเพิ่มเติม
การใช้ Msgbox หรือ Debug.print เช่น
MsgBox Me.Combo20.Column(1)
และการใช้ Debug.print
ทดสอบให้ลองใส่ไว้ในเหตุการณ์ที่คุณต้องการทำงาน
Private Sub Combo20_Change()
Debug.Print Me.Combo20.Column(1)
End Sub
เมื่อคุณเลือก Combobox เสร็จ ให้กดปุ่ม Ctrl + G ที่คีย์บอร์ด
มันจะแสดงค่าออกมาให้คุณลองดูว่าค่าที่ได้ถูกต้องตามต้องการหรือเปล่าได้
ที่คุณเขียนไว้ระบุ column ผิดครับ อิอิ
แนะนำเพิ่มเติม
การใช้ Msgbox หรือ Debug.print เช่น
MsgBox Me.Combo20.Column(1)
และการใช้ Debug.print
ทดสอบให้ลองใส่ไว้ในเหตุการณ์ที่คุณต้องการทำงาน
Private Sub Combo20_Change()
Debug.Print Me.Combo20.Column(1)
End Sub
เมื่อคุณเลือก Combobox เสร็จ ให้กดปุ่ม Ctrl + G ที่คีย์บอร์ด
มันจะแสดงค่าออกมาให้คุณลองดูว่าค่าที่ได้ถูกต้องตามต้องการหรือเปล่าได้
5 @R04708
ภาพตัวอย่างครับการใช้ Debug.Print
6 @R04733
ผมให้ค้นกระทู้เก่า ค้นหรือยังครับ
http://www.thai-access.com/Topic.asp?src=picture&CategoryID=1
http://www.thai-access.com/chaiya.asp?src=picture
http://www.thai-access.com/Topic.asp?src=picture&CategoryID=1
http://www.thai-access.com/chaiya.asp?src=picture
7 @R04750
http://www.thai-access.com/yeadram_view.php?topic_id=60&page=1
ในกระทู้นั้นเขาฝั่งโค้ดไว้ใน ปุ่มคำสั่ง หรือไม่ก็ฝังโค้ดไว้ในเหตุการณ์ตอนเปิดฟอร์ม ส่วนของคุณก็ปรับแค่เอาโค้ดมาฝังไว้ใน เหตุการณ์ Onchange ของคอมโบ แค่นั้นเองครับ
Private Sub Combo_Change()
Showpic
End Sub
ในกระทู้นั้นเขาฝั่งโค้ดไว้ใน ปุ่มคำสั่ง หรือไม่ก็ฝังโค้ดไว้ในเหตุการณ์ตอนเปิดฟอร์ม ส่วนของคุณก็ปรับแค่เอาโค้ดมาฝังไว้ใน เหตุการณ์ Onchange ของคอมโบ แค่นั้นเองครับ
Private Sub Combo_Change()
Showpic
End Sub
Time: 0.3483s
"จากนั้น ผมสร้าง text box มา เพื่อให้ โชว์ ช่องในคอลัมน์ เลข อ่ะครับ"
-- - - อ่านแล้วไม่เข้าใจความต้องการครับ
คำถามที่ 2
"การใส่ code นี่ใช่ คลิกขวาแล้ว Build Event ป่าวครับ"
-- - - ผมไม่เคยใช้ 2007 นะ แต่คิดว่าน่าจะถูกต้องแล้ว
คำถามที่ 3
"แล้วถ้าต้องการให้ เปลี่ยน combo box แล้ว รูปเปลี่ยนตามนี่ ทำไงอ่ะครับ"
-- - - คุณต้องเขียนโค้ดฝังในเหตุการณ์
ใน 1 คอนโทรลของคุณน่ะครับ มันสามารถมีได้หลายเหตุการณ์ ในเมื่อคุณต้องการให้เกิดคำสั่งให้เกิดการทำงานในเหตุการณ์ ตอนเปลี่ยนข้อมุลในคอมโบ คุณก็ควรเลือกเหตุการณ์ OnChange หรือ เมื่อเปลี่ยนแปลง
- เปิดฟอร์มในมุมมองออกแบบ
- คลิ๊กเลือกที่คอมโบตัวดังกล่าว
- ถ้า Dialog คุณสมบัติ ยังไม่ได้เปิด ให้เปิดขึ้นมา
- ไปที่แท็บ Event ของ Dialog มองหาบรรทัดเหตุการณ์ Onchange (เมื่อเปลี่ยนแปลง)
- คลิ๊กในช่องว่างมันจะมีตัวเลือกให้เลือก [Event Procedure] แล้วจะมีปุ่มอยู่ข้างหลังในบรรทัดเดียวกันนั่นแหละครับ มันจะเขียนไว้ ... ให้คลิ๊ก 1 ครั้ง
- มันจะเปิด หน้าต่าง VBA ขึ้นมาให้ พร้อมทั้งเริ่มเขียนโปรแกรมย่อยให้คุณแล้ว โดยโปรแกรมย่อยดังกล่าวจะทำงานก็ต่อเมื่อเกิดเหตุการณ์ตามที่เลือก ในขณะรันฟอร์ม
มันจะขึ้นต้นว่า Private Sub ....._Change()
แล้วจะมีบรรทัดจบว่า End sub
ในระหว่างบรรทัดแรก กับบรรทัดจบ คุณสามารถแทรกคำสั่งไว้ในนั้น ได้ตามใจ จะแทรกกี่คำสั่ง กี่บรรทัดก็ได้ (แต่หลักการง่ายๆ สำหรับการเขียน VBA ก็คือ ต้องใช้คำสั่งละ 1บรรทัดเท่านั้น เมื่อจะใช้คำสั่งอื่นๆ คุณต้องขึ้นบรรทัดใหม่
อย่างความต้องการของคุณ ก็อาจจะได้ออกมาเป็น
Private Sub Combo1_Change()
-โอมม เพี้ยง จงเปลี่ยนรูป จงรูปเปลี่ยน รูปอะไรก็ช่างเหอะ รูปจากไหนก็ช่างเหอะ เปลี่ยนจากอะไรเป็นอะไรก็ช่างเหอะ โอม จงเปลี่ยน จงเปลี่ยน!
End sub