ขอความช่วยเหลือเรื่อง vba ปุ่ม edit ค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 1,624   11
URL.หัวข้อ / URL
ขอความช่วยเหลือเรื่อง vba ปุ่ม edit ค่ะ

หนูกำลังศึกษาและเขียนโปรแกรมใน Access อยู่ แต่เนื่องจาก ปุ่มแก้ไข ที่ได้พยายามเขียน และปรับเปลี่ยนโค๊ดตามที่ศึกษาในเว็บบอร์ดต่างๆ มันไม่รันแล้ว error อยากให้ทุกท่านช่วยดู แนะนำ หรือชี้แนะให้หน่อยค่ะ ขอบคุณล่วงหน้าค่ะ

Private Sub cmd_editdata_Click()

CurrentDb.Execute "UPDATE tb_data " & _
"SET staff = '" & Me.txt_staff.Value & _
"', date = " & toSTR(Me.txt_date) & _
", barcode = " & Me.txt_barcode.Value & _
", item = " & Me.txt_item.Value & _
", section = " & Me.cbo_section & _
", remark = " & Me.txt_remark.Value & _
", claim = " & Me.txt_claim.Value & _
", status = " & Me.chk_status.Value & _
", amount_repeating = " & Me.chk_amount_repeating.Value & _
", penalty_mth = " & Me.txt_penalty_mth.Value & _
", cashier = " & Me.cbo_cashier & _
" WHERE id_data = " & Me.list_data.Column(0)

Me.list_data.Requery
Call MsgBox("แก้ไขข้อมูลเรียบร้อย")

End Sub

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

1 @R23228
เดานะครับ เพราะไม่บอกว่า error ที่บรรทัดไหน รหัสอะไร ข้อความอะไร

ค่าของฟิลด์ที่มีประเภทข้อมูล string หรือ text เวลาส่งไปใน SLQ statement ต้องมีเครื่องหมาย single quote ( ' ) ครอบ เช่น "update .... set myname = '" & Me.MyName & "', ..... "

ค่าของฟิลด์ที่มีประเภทข้อมูล date/time ต้องมีเครื่องหมาย # ครอบ และผมจะแปลงวันที่ให้อยู่ในรูปแบบ วัน/ชื่อเดือน/ปี เพื่อป้องกันไม่ให้โปรแกรมเข้าใจผิดระหว่างการตีความ xx/nn/yyyy ว่าเป็น "วัน/เดือน" หรือ "เดือน/วัน" กันแน่ ดังนั้นก็จะเป็น เช่น "update .... set mydate = #" & format(Me.MyDate, "dd/mmm/yyyy") & "#, ..... " หรือจะย่อๆเป็น "update .... set mydate = " & format(Me.MyDate, "\#dd/mmm/yyyy\#") & ", ..... " ก็ได้

เพิ่มเติม
1. Me.ชื่อคอนโทรล ไม่ต้องมี .Value ต่อท้าย เพราะเป็น dafault property ของคอนโทรลอยู่แล้ว เขียนกับไม่เขียนก็ไม่แตกต่าง
2. Call MsgBox น่าจะเป็น MsgBox "...." เฉยๆมากกว่า

2 @R23231
ขอบคุณ คุณสันติสุข ค่ะ
---------------

ถ้ารันโค๊ด แค่นี้ จะรันได้ปกติค่ะ แต่มันจะแก้ได้แค่ staff กับ barcode ค่ะ

Private Sub cmd_editdata_Click()
    CurrentDb.Execute "UPDATE tb_data " & _
        "SET staff = '" & Me.txt_staff.Value & _
        "', barcode = " & Me.txt_barcode.Value & _
        " WHERE id_data = " & Me.list_data.Column(0)
             
        Me.list_data.Requery
        Call MsgBox("แก้ไขข้อมูลเรียบร้อย")
End Sub

------------------

แต่พอเพิ่มข้อมูลให้ครบทุกช่อง มันจะ error แบบในรูปค่ะ
3 @R23232




-------------
ขออภัยค่ะ เพิ่งเคยใช้บอร์ดเป็นครั้งแรกค่ะ
4 @R23233
มันบอกว่ามีส่วนของคำสั่งที่เกี่ยวเนื่องกับฟิลด์ไหนสักที่ที่ผิดครับ คุณลองเขียนคำสั่ง debug.print "UPDATE ...... ไว้ก่อนคำสั่ง CurrentDB.Execute ครับ พอทำงาน มันจะพิมพ์คำสั่ง UPDATE... ออกมา ให้กด Ctrl-G เพื่อเปิด Immediate Window   ดูคำสั่ง UPDATE ว่ามันผิดไวยกรณ์ตรงไหน
5 @R23234
ขอโทษจริงๆค่ะ คุณสันติสุข

ดิฉันไม่ได้มีพื้นฐานด้านนี้ เลยใช้คำสั่ง debug.print ไม่เป็นค่ะ
รบกวน ช่วยเขียนชุดคำสั่งให้ดูหน่อยได้ไหมค่ะ
ว่าจะส่งโปรแกรมให้ดู มันก็มีข้อมูลสำคัญอยู่ ไม่สามารถคงให้ได้
แต่ตัวโค๊ดของปุ่มแก้ไขทั้งหมด มีอยู่เท่าที่ส่งให้ดูจริงๆค่ะ
6 @R23237
แบบนี้ถูกต้องรึป่าวค่ะ ถ้าใช่ ผลที่ได้ใน Immediate Window ถูกต้องแล้วค่ะ

7 @R23238
ทำไมฟิลด์อื่นที่เป็น Text/String (เช่น item, section) คุณถึงไม่ครอบด้วย single quote เหมือนฟิลด์ staff ครับ นั่นทำให้ไวยกรณ์ผิด
8 @R23241
เรียน คุณสันติสุข

จากที่ดูจากกระทู้ต้นแบบที่ศึกษามา(กระทู้นั้นมีการจัดวางและรูปแบบที่เหมือนกันค่ะ) เค้าไม่ได้เขียนค่ะ

และก่อนหน้าที่จะตั้งกระทู้นี้ ได้ลองหลายๆวิธีที่พอจะเดาออก รวมถึงได้ลองใส่ ' แล้วค่ะ แต่ไม่ได้ค่ะ ผลของ debug ก็เป็นแบบนี้เสมอค่ะ

ถ้ายังไงรบกวนคุณสันติสุข เขียน code ที่คิดว่าถูกให้หน่อยได้ไหมค่ะ จะได้ไปแก้เลย
9 @R23242
ให้แก้เป็น

Private Sub cmd_editdata_Click()
   Dim SQL As String

   SQL = "UPDATE .....
   Debug.Print SQL
   CurrentDb.Execute SQL

End Sub

อย่าลืมใส่ Single Quote ในประโยค UPDATE ให้ถูกต้องด้วยครับ ส่วนผมไม่สามารถใส่ให้ได้ เพราะไม่รู้ว่าฟิลด์ไหนมีประเภทข้อมูลเป็นอะไร
10 @R23339
ลองพยายามดูหลายทางที่คุณสันติสุขแนะนำมาแล้วค่ะ (เท่าที่จะเข้าใจได้) ตั้งแต่ตอนนั้น จนถึงตอนนี้ มันก็ยังรันไม่ได้จริงๆค่ะ ติดแบบเดิมตลอดค่ะ

-----------------------

- ตารางชื่อ tb_data ค่ะ
- staff เป็น text ค่ะ
- date เป็นวันที่ (มีการทำโมดูลแปลงค่าเรื่องวันไว้แต่แรกแล้วค่ะ ตามที่กระทู้ต้นแบบได้สอนไว้ค่ะ)
- barcode เป็น text ค่ะ
- item เป็น text ค่ะ
- section เป็น combo box ค่ะ (ดึงมาจากอีกตารางนึงค่ะ)
- remark เป็น text ค่ะ
- claim เป็น text ค่ะ
- status เป็น check box ค่ะ (ค่า yes/no)
- amount_repeating เป็น check box ค่ะ (ค่า yes/no) // ในโค๊ดข้างบนพิมพ์ผิดอยู่ค่ะ
- penalty_mth เป็น check box ค่ะ (ค่า yes/no)
- cashier เป็น combo box ค่ะ (ดึงมาจากอีกตารางนึงค่ะ)
- id_data เป็น auto number ค่ะ เป็นคีย์หลักด้วยค่ะ
11 @R23340
ประเภทข้อมูล (data type) ของฟิลด์ต่างๆที่ถูกต้อง ให้ไปเปิดเทเบิลใน design view แล้วดูคอลัมน์ data type ว่าเขียนว่าอะไร อย่าบอกอ้างอิงกับบนหน้าจอครับ เพราะเห็นบนหน้าจออาจเป็นวันที่ แต่ประเภทข้อมูลจริงๆ อาจเป็น Text (short text, long text) ก็ได้ หรือหน้าจออาจคิดว่าเป็น text แต่ประเภทข้อมูลอาจเป็น Numeric ก็ได้
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3494s