กระทู้เก่าบอร์ด อ.Yeadram
1,715 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
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
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 แบบในรูปค่ะ
---------------
ถ้ารันโค๊ด แค่นี้ จะรันได้ปกติค่ะ แต่มันจะแก้ได้แค่ 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 ไม่เป็นค่ะ
รบกวน ช่วยเขียนชุดคำสั่งให้ดูหน่อยได้ไหมค่ะ
ว่าจะส่งโปรแกรมให้ดู มันก็มีข้อมูลสำคัญอยู่ ไม่สามารถคงให้ได้
แต่ตัวโค๊ดของปุ่มแก้ไขทั้งหมด มีอยู่เท่าที่ส่งให้ดูจริงๆค่ะ
ดิฉันไม่ได้มีพื้นฐานด้านนี้ เลยใช้คำสั่ง debug.print ไม่เป็นค่ะ
รบกวน ช่วยเขียนชุดคำสั่งให้ดูหน่อยได้ไหมค่ะ
ว่าจะส่งโปรแกรมให้ดู มันก็มีข้อมูลสำคัญอยู่ ไม่สามารถคงให้ได้
แต่ตัวโค๊ดของปุ่มแก้ไขทั้งหมด มีอยู่เท่าที่ส่งให้ดูจริงๆค่ะ
6 @R23237
แบบนี้ถูกต้องรึป่าวค่ะ ถ้าใช่ ผลที่ได้ใน Immediate Window ถูกต้องแล้วค่ะ
7 @R23238
ทำไมฟิลด์อื่นที่เป็น Text/String (เช่น item, section) คุณถึงไม่ครอบด้วย single quote เหมือนฟิลด์ staff ครับ นั่นทำให้ไวยกรณ์ผิด
8 @R23241
เรียน คุณสันติสุข
จากที่ดูจากกระทู้ต้นแบบที่ศึกษามา(กระทู้นั้นมีการจัดวางและรูปแบบที่เหมือนกันค่ะ) เค้าไม่ได้เขียนค่ะ
และก่อนหน้าที่จะตั้งกระทู้นี้ ได้ลองหลายๆวิธีที่พอจะเดาออก รวมถึงได้ลองใส่ ' แล้วค่ะ แต่ไม่ได้ค่ะ ผลของ debug ก็เป็นแบบนี้เสมอค่ะ
ถ้ายังไงรบกวนคุณสันติสุข เขียน code ที่คิดว่าถูกให้หน่อยได้ไหมค่ะ จะได้ไปแก้เลย
จากที่ดูจากกระทู้ต้นแบบที่ศึกษามา(กระทู้นั้นมีการจัดวางและรูปแบบที่เหมือนกันค่ะ) เค้าไม่ได้เขียนค่ะ
และก่อนหน้าที่จะตั้งกระทู้นี้ ได้ลองหลายๆวิธีที่พอจะเดาออก รวมถึงได้ลองใส่ ' แล้วค่ะ แต่ไม่ได้ค่ะ ผลของ 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 ให้ถูกต้องด้วยครับ ส่วนผมไม่สามารถใส่ให้ได้ เพราะไม่รู้ว่าฟิลด์ไหนมีประเภทข้อมูลเป็นอะไร
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 ค่ะ เป็นคีย์หลักด้วยค่ะ
-----------------------
- ตารางชื่อ 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 ก็ได้
Time: 0.3757s
ค่าของฟิลด์ที่มีประเภทข้อมูล 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 "...." เฉยๆมากกว่า