สมัครสมาชิก
 

สอบถามเรื่อง If จาก Code ที่มีอยู่ครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

23 พ.ค. 62 , 17:35:34
อ่าน 646 ครั้ง

arampong

เรียนอาจารย์ทุกท่านรบกวนช่วยดู Code ให้หน่อยครับว่าผมผิดตรงส่วนไหนครับ

คือ 1.ผมเขียน If เพื่อเช็คค่า TXUserID ถ้าเป้นคาว่างให้แจ้งเตือนแล้วปิดเปิด form ใหม่
    2.ถ้าไม่ใช่ค่าว่าง ให้เช็คค่า TxItem  ว่าในฐานข้อมูลมีค่าหรือเปล่า คือ strSQL>0   ให้ทำงาน
    3.ถ้า strSQL <0 ให้เคลียค่า TxItem แล้วให้ setfocus ที่TxItem

ที่ติดตอนนี้คือครับ 1.ผมมี If 2 จุดแต่โปรแกรมทำไมให้ปิด End If จุดเดียวครับ
                      2.ค่า TXUserID เป็นค่าว่างแต่ทำไมไปทำงานตรงส่วน TxItem ได้ครับทั้งที่เช็คค่าว่างแล้ว
                      3.ค่า Else สุดท้าย TxItem.Value = Null ทำงานได้แต่ TxItem.SetFocus ทำไม Cursor ไปวิ่งไปที่กำหนดครับ

    ขอขอบคุณอาจารย์ไว้ล่วงหน้าครับ       
     

จากที่ผมเขียนครับ cODE ได้ตามนี้ครับ


Private Sub TxITEM_AfterUpdate()


Dim dbb As DAO.Database 'ÊÓËÃѺà¡çº Log
Dim rss As DAO.Recordset  'ÊÓËÃѺà¡çº Log
Dim strSQL As String
Dim strUserID As String
Dim strTxItem As String

On Error Resume Next

strTxItem = TxItem.Value
strUserID = TXUserID.Value

strSQL = DCount("Item", "QrItem")
Set dbb = CurrentDb
   
  If strTxItem = "" Then
            MsgBox "¡ÃسÒãÊè¼Ùéãªé§Ò¹¡è͹·Ø¡¤ÃÑ駤ÃѺ", vbOKOnly, "Warning!"
            DoCmd.Close acForm, Me.Name
            DoCmd.OpenForm "frmQR_T1" 
           
     ElseIf strSQL > 0 Then
                 
             Set dbb = CurrentDb
             Set rss = db.OpenRecordset("LogUser", dbOpenDynaset) 'ºÑ¹·Ö¡ Log ¡ÒÃãªé§Ò¹Å§ã¹µÒÃÒ§
             rss.AddNew
             rss!UserID = strUserID ' ºÑ¹·Ö¡ Item User
             rss!ITEM = strTxItem 'ºÑ¹·Ö¡ Item
             rss!Login = Now() 'ºÑ¹·Ö¡·Ñé§ Çѹ·Õè áÅÐàÇÅһѨ¨ØºÑ¹
            rss.Update
            rss.Close: Set rss = Nothing
            dbb.Close: Set dbb = Nothing
            Me.Requery
            Command9.SetFocus
           
           
    Else
                             
            MsgBox "Item ¹ÕéäÁèÁÕã¹ÃкºËÃ×ÍÂѧäÁèä´éà¾ÔèÁà¢éÒä»ã¹Ãкº", vbOKOnly, "Warning!"
            TxItem.Value = Null
            TxItem.SetFocus
     
      End If
     'End If   
End Sub

 

23 พ.ค. 62 , 17:55:59
ตอบกลับ #1

arampong

: สอบถามเรื่อง If จาก Code ที่มีอยู่ครับ
« ตอบกลับ #1 เมื่อ: 23 พ.ค. 62 , 17:55:59 »
เรียนอาจารย์ข้อ 1.ผมเข้าใจละครับเรื่อง Funtion If
2.ได้แล้วครับผมสลับ strUserID กับ  strTxItem สลับ Text ครับ
3. ยังติดอยู่ครับว่าทำไมมันไม่ setfocus ให้

 

23 พ.ค. 62 , 19:43:31
ตอบกลับ #2

ปิ่นณรงค์

: สอบถามเรื่อง If จาก Code ที่มีอยู่ครับ
« ตอบกลับ #2 เมื่อ: 23 พ.ค. 62 , 19:43:31 »
เรียนอาจารย์ข้อ 1.ผมเข้าใจละครับเรื่อง Funtion If
2.ได้แล้วครับผมสลับ strUserID กับ  strTxItem สลับ Text ครับ
3. ยังติดอยู่ครับว่าทำไมมันไม่ setfocus ให้
โพสโค้ดที่แก้แล้ว ข้อ 1 กับ 2  มาดูหน่อยครับ
เพราะการใช้ IF ข้างบนมันผิดตำแหน่งเล็กน้อย ต้องแก้
:love: :grin:
 

24 พ.ค. 62 , 20:37:37
ตอบกลับ #3

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

: สอบถามเรื่อง If จาก Code ที่มีอยู่ครับ
« ตอบกลับ #3 เมื่อ: 24 พ.ค. 62 , 20:37:37 »
ห้าม set focus กลับไปที่ตัวเองครับ การทดสอบว่าเงื่อนไขไหนไม่ผ่านและจะให้ยังคงอยู่ที่เท็กซ์บ็อกซ์เดิม เราต้องทำที่ BeforeUpdate event  และเราจะกำหนดพารามิเตอร์ Cancel เป็น True เพื่อให้ Access หยุดเพียงแค่ event นี้ ดังนั้นจึงไม่ต้องกำหนด .SetFocus เพิ่มเติม แต่เนื่องจากใน BeforeUpdate event จะไม่ยอมให้เราแก้ไขค่าในเท็กซ์บ็อกซ์ของตัวมันเองเช่นกัน จึงไม่สามารถกำหนดค่า Null กลับไปได้ วิธีที่พอทำได้คือ กำหนดให้ตัวอักษรทั้งหมดในเท็กซ์บ็อกซ์ถูกเลือก ดังนั้นผู้ใช้ก็สามารถป้อนค่าใหม่ทับของเดิมไปได้ทันทีครับ

โค้ดคุณก็จะมีแค่นี้ครับ

Private Sub TxITEM_ฺBeforeUpdate(Cancel As Integer)
  If Me.TxItem.Text = "" Then
  ElseIf DCount("Item", "QrItem") > 0 Then
  Else
      MsgBox "Item ¹ÕéäÁèÁÕã¹ÃкºËÃ×ÍÂѧäÁèä´éà¾ÔèÁà¢éÒä»ã¹Ãкº", vbOKOnly, "Warning!"
      Cancel = True
      Me.TxItem.SelStart = 0
      Me.TxItem.SelLength = Len(Me.TxItem.Text)
  End If
End Sub


« แก้ไขครั้งสุดท้าย: 24 พ.ค. 62 , 21:03:12 โดย สันติสุข »
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

27 พ.ค. 62 , 10:30:52
ตอบกลับ #4

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

: สอบถามเรื่อง If จาก Code ที่มีอยู่ครับ
« ตอบกลับ #4 เมื่อ: 27 พ.ค. 62 , 10:30:52 »
เพิ่มเติมหน่อยนะครับ ที่บอกไปครั้งก่อนว่า "ใน BeforeUpdate event จะไม่ยอมให้เราแก้ไขค่าในเท็กซ์บ็อกซ์ของตัวมันเอง" หมายถึงจะเกิด runtime error ขึ้น แต่ถ้าเราอยากข้าม error นี้ไป ก็ทำแบบเถื่อนๆคือใส่ On Error Resume Next ตามโค้ดที่แก้ไขข้างล่างนี้ก็ได้

Private Sub TxITEM_ฺBeforeUpdate(Cancel As Integer)
  If Me.TxItem.Text = "" Then
  ElseIf DCount("Item", "QrItem") > 0 Then
  Else
      MsgBox "Item ¹ÕéäÁèÁÕã¹ÃкºËÃ×ÍÂѧäÁèä´éà¾ÔèÁà¢éÒä»ã¹Ãкº", vbOKOnly, "Warning!"
      Cancel = True
      On Error Resume Next
      Me.TxItem.Text = ""

  End If
End Sub

หมายเหตุ : สังเกตให้ดีว่าเราต้องอ้าง TxtItem.Text นะครับ ไม่ใช่ TxtItem เฉยๆ
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: sjs


บอร์ดเรียนรู้ Access สำหรับคนไทย