กระทู้เก่าบอร์ด อ.Yeadram
        
           1,897   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.0637s
    
      
		
ค่าของฟิลด์ที่มีประเภทข้อมูล 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 "...." เฉยๆมากกว่า