SpinButton ไม่ทำงานใน MsAccess2007
กระทู้เก่าบอร์ด อ.Yeadram

 1,429   7
URL.หัวข้อ / URL
SpinButton ไม่ทำงานใน MsAccess2007

ผมสร้างปุ่ม Spin Button(Active X) เพื่อปรับเลื่อนเวลาขึ้นลง ตอนที่เปิดด้วย Access2003 ก็ใช้งานได้ดีอยู่แต่พอเปิดด้วย 2007 กลับทำงานไม่ได้เสียอย่างนั้น

อธิบายเพิ่มเติม: ปุ่ม Spin ผมใช้เพื่อที่จะปรับตัวเลขใน textbox เพิ่มขึ้นหรือลดลง
อาการคือกดปุ๊ปแทนที่ตัวเลขจะปรับขึ้นลงตามที่เรากดเลย แต่ตัวเลขใน textbox ไม่ปรับตาม เราต้องเลื่อน focus ไปที่ textbox ก่อนตัวเลขจึงจะปรับ version2003 ไม่เป็นนะครับเพราะผม เขียนโค๊ดไว้ที่ On Updated ให้ Me.Recale มันใช้งานได้ปกติ แต่พอ version นี้ ผมลองเปลี่ยนเป็น Me.Refresh หรือ Textbox.Requery มันก็ยังไม่ทำงานอยู่ดี สรุปว่าเหมือน Event On Updated มันจะไม่ทำงานเลย

แก้อย่างไรดีครับ

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

1 @R18043
ไม่เคยใช้ Spin Button แต่ให้ลองคอมไพล์ก่อน แล้วก็ดีบัคดูว่าโค้ดได้ทำงานจริงๆหรือไม่ โดยการตั้ง Breakpoint เอาไว้ที่บรรทัดแรกของโค้ดใน On Updated ถ้ามันไม่ทำงาน ก็ให้ไปดูว่าที่ On Updated ใน Property Sheet ของ Spin Button นี้เป็นคำว่า [Event Procedure] อยู่หรือไม่

หมายเหตุ : ActiveX อะไรที่มีมาด้วยในเครื่องคอมฯ อาจไม่จำเป็นว่าจะใช้ได้กับ Access เสมอไปนะครับ ตรงนี้ให้เช็คจากเวปของไมโครซอฟท์อีกทีว่าตัวไหนใช้ได้บ้าง
2 @R18044
เช็คแล้วครับ
มีคำว่า [Event Procedure] อยู่

ผมลองเพิ่มโดยการใส่ Msgbox "A" เพื่อทดสอบว่า On Update ทำไงไหม
ปรากฎว่านิ่งครับ หลังจากกด ...ไม่มี ข้อความใดปรากฎขึ้นมาเลย


หมายเหตุ: เครื่องมือยังใช้ได้นะครับ หลังจากคลิกที่ spin button(ปุ่มที่มีลูกศรขึ้นลงติดกัน) ตัวเลขใน textbox จะยังคงเปลี่ยนอยู่(เปลี่ยนต่อเมื่อเอาเมาท์เลื่อนไปที่ textbox ไม่ได้เปลี่ยนทันที) และ Event ตัวอื่นก็ยังคงสามารถใช้งานได้อยู่
ผมทดสอบโดยลองกับ Event "ON ENTER" ....ใช้งานได้ครับ แต่ไม่ตอบโจทย์ผม
3 @R18045
เพิ่มเติมครับ...
ความจริงผมก็ใช้ Active X ไม่ค่อยเป็นเหมือนกัน เพียงแต่
SpinButton1 ผม set Control Source เชื่อมโยงกับ Field1
Textbox1 ผม set Control Source เชื่อมโยงกัน Field1 เหมือนกัน

ผมเลยมันกำหนด On Update ให้ Form มัน Recale หรือ Refresh เพื่อ update ข้อมูลตาม SpinButton1 ....แต่อย่างที่ว่าเอ้ยอย่างที่ผมสงสัยนะครับ ดูเหมือน On Update มันจะไม่ทำงาน
4 @R18046
อะฮ่า แก้ได้แล้วครับ ตอนแรก ยึดติดกับ user interface ที่ access ให้มามากไปหน่อย ...ตอนหลังเข้าไปดูที่หน้า vb ว่ามันมี event อะไรมาให้มั่งก็เลยเข้าไปแก้ จาก on update เป็น on change แทน ...เอิ่ม ไม่รู้คนอื่นที่ผ่านมาอ่านจะงงหรือเปล่า
คือแบบแก้มันไปตรงๆในหน้า vb coding ...ตอนนี้ใช้งานได้เป็นปกติแล้วครับ
5 @R18048
ขอแนะนำนิดหน่อยนะครับ คือนึกประโยชน์ของการนำคอนโทรล SpinButton ไปผูกติดกับฐานข้อมูลไม่ออก แต่ผมเข้าใจว่าที่คุณทำอย่างนั้นเพื่อให้มันสามารถปรับลดค่ามากน้อยของ Textbox1 แล้วใช้คำสั่ง Recale เพื่อแสดงค่าหน้าฟอร์มตรงตามที่กดทุกครั้งใช่ไหมครับ ซี่งจริงๆแล้วผมว่าวิธีเขียนที่ถูกเค้าไม่นิยมเอาคอนโทรลพวกนี้ผูกติดกับฐานข้อมูลจริงนะครับ ผมขอแนะนำวิธีเขียนที่เค้านิยมเขียนกันให้ลองดูนะครับ

1. Text Box ชื่อ Text1 ผูกฐานข้อมูลตัวเลขจากตารางทั่วไปปกติ

2. สร้าง SpinButton ชื่อ SpinButton1 กำหนดม Property > Other > Min = -2147483648, Max = 2147483647 (คือค่าสูงสุดของ Long Integer)

3. ที่หน้าต่าง VBE ของฟอร์ม กำหนดตัวแปรชื่อ varAct ในส่วน Declaration ดังนี้:

'----------------Declarations----------------
'Option Explicit
Private varAct As Long
'--------------------------------------------

4. เขียนโค๊ดใน SpinButton1 ที่ Event > On Updated ดังนี้:

'----------------Start Code----------------
'Private Sub SpinButton1_Updated(Code As Integer)
    Select Case SpinButton1
        Case Is < varAct
            Me.Text1 = Me.Text1 - 1
        Case Is > varAct
            Me.Text1 = Me.Text1 + 1
    End Select
    varAct = SpinButton1
'End Sub
'-----------------End Code-----------------

- รันฟอร์ม หากค่าของ Text1 เป็น 50 เมื่อกดปุ่ม SpinButton1 ปุ่มแรก เลขใน Text1 จะเพิ่มขึ้นที่ละ 1 และหากกดปุ่ม SpinButton1 ปุ่มหลัง เลขใน Text1 ก็จะค่อยๆลดลง (นับจำนวนเป็นติดลบด้วย)
- ค่าใน Text1 จะเป็นตามค่าที่เรากดทันทีโดยไม่ต้องใช้คำสั่ง Recale

ปรับใช้ดูนะครับ
6 @R18049
*คอนโทรล SpinButton ไม่ต้องผูกกับฐานข้อมูลใดๆเลยนะครับ

*จะเห็นว่ามีความยืดหยุ่นกว่า เพราะเราสามารถใส่ค่าอื่นๆหรือสูตรคำนวณลงไปในคำสั่งได้มากกว่าการผูกมันไว้กับฐานข้อมูล
7 @R18054
ขอบคุณครับ....
คือไม่ได้ซีเรียสหนะครับ ตอนแรกที่สร้าง ก็ใช้วิธีเลือกๆเอาจากหน้าต่าง property
เห็นมันมี control source ให้เลือกก็เลยเลือกไป กรอปกับเครื่องมือมันสามารถปรับตัวเลขได้เลยโดยไม่ต้องเขียนcode
...แต่ แต่ พอกดเสร็จแล้วหน้า form มันไม่อัพเดทตามฐานข้อมูลนี่สิครับ ผมก็เลยไปเพิ่ม code เสียหน่อยให้มัน recale หรือ refresh ...จริงๆมันก็ทำงานได้ดี แต่มาติดปัญหาตรงที่ On Update มันไม่ทำงานใน version 2007 นี่แหละครับ ก็เลยต้องมาเปลี่ยนเป็น On change แทน

...แต่ code ที่คุณ TTT ให้มาก็ OK นะครับใช้ได้เหมือนกัน ขอบคุณที่มาช่วยแชร์
...จริงยังมี Event ตัวอื่นที่ซ่อนอยู่อีก คือ SpinUp กับ SpinDown ซึ่งสามารถนำมาเขียน code เพื่อประยุกต์ใช้ได้ทันที
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3283s