กระทู้เก่าบอร์ด อ.Yeadram
        
           5,987   24		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        ใส่ค่าใน combo box ถ้าไม่มีในรายการ ให้แจ้งเตือน      
    
      ใส่ค่าใน combo box ถ้าไม่มีในรายการ ให้แจ้งเตือนว่า "ไม่มีในรายการ คุณต้องการเพิ่มรายการเองหรือไม่"
ต้องเขียนโค๊ด ควบคุมอย่างไรครับ
    
  ต้องเขียนโค๊ด ควบคุมอย่างไรครับ
				24 Reply in this Topic. Dispaly 2  pages and you are on page number 1 
				
        
    1 @R13929    
        
  
      คือ จะเขียนแค่ Message box แจ้งเตือนครับ    
    
  
        
    2 @R13930    
        
  
      ไม่มีในรายการจะเป็น combo box ได้ยังงัยครับ
เพราะค่าที่เลือกมันอยู่ในรายการ
    
  เพราะค่าที่เลือกมันอยู่ในรายการ
        
    3 @R13932    
        
  
      ขอบคุณอาจารย์ Un ครับ
คือ ฟอร์มนี้เป็นข้อมูลของ ตาราง A เฉพาะค่าใน combo box ดึงมาจาก ตาราง B แล้วตั้งค่า combo box
- จำกัดค่าในรายการ = ไม่ใช่
เมื่อเพิ่มข้อมูลแล้วค่าใน combo box ก็จะไปเก็บไว้ ตาราง A ครับ
    
  คือ ฟอร์มนี้เป็นข้อมูลของ ตาราง A เฉพาะค่าใน combo box ดึงมาจาก ตาราง B แล้วตั้งค่า combo box
- จำกัดค่าในรายการ = ไม่ใช่
เมื่อเพิ่มข้อมูลแล้วค่าใน combo box ก็จะไปเก็บไว้ ตาราง A ครับ
        
    4 @R13933    
        
  
      โพสไม่ได้ทดสอบ    
    
  
        
    5 @R13936    
        
  
      ใช้ event On Not In List ของ combo box ครับ
    
    
  
        
    6 @R13938    
        
  
      โพสไม่ได้ มันขึ้นแบบนี้
Microsoft VBScript runtime error '800a0005'
Invalid procedure call or argument: 'Mid'
/functions/functions_filters.asp, line 37
    
  Microsoft VBScript runtime error '800a0005'
Invalid procedure call or argument: 'Mid'
/functions/functions_filters.asp, line 37
        
    7 @R13939    
        
  
      ลองตัดเป็นช่วงๆ ดูนะครับ
สมมุติ ฟอร์มที่คุณทำชื่อ Form1 คอมโบชื่อ combo1 ฟิลด์ที่เลือกในตารางB ชื่อ Fname
ให้สร้าง Query โดยเลือกตารางB เลือก Fname ใส่เงื่อนไข forms!Form1!combo1 บันทึก Query ชื่อquery1
    
    
  สมมุติ ฟอร์มที่คุณทำชื่อ Form1 คอมโบชื่อ combo1 ฟิลด์ที่เลือกในตารางB ชื่อ Fname
ให้สร้าง Query โดยเลือกตารางB เลือก Fname ใส่เงื่อนไข forms!Form1!combo1 บันทึก Query ชื่อquery1
        
    8 @R13940    
        
  
      ไปที่ฟอร์ม ที่ combo1 เลือก Event Afterupdate แล้วใส่โคตรนี้ไป    
    
  
        
    9 @R13941    
        
       โพสไม่ได้
  โพสไม่ได้
    
    
  
   โพสไม่ได้
  โพสไม่ได้
        
    10 @R13942    
        
       
    
    
  
   
    
        
    11 @R13943    
        
  
      ขอบคุณครับ
1. ของ คุณPichaiTC ใส่ msgbox ใน event On Not In List ใช้ไม่ได้ msgbox ไม่ขึ้นมาเตือนครับ
2. ของ คุณUn ครับ
2.1 ตรงที่ใส่เงื่อนไข forms![ชื่อForm]!ชื่อcombobox
มันจะขึ้นรายการมาชื่อเดียวครับ คือชื่อที่มันมีอยู่
2.2 ใส่ if dcount ฯลฯ ไป msgbox ก็ไม่ขึ้นมาเตือนครับ
ขอบคุณ คุณอัน ครับ โพสไม่ได้ยังอุตส่าห์พิมพ์ใส่รูปมาโพสให้
น้ำใจงามทั้ง คุณPichaiTC คุณUn ครับ
    
  1. ของ คุณPichaiTC ใส่ msgbox ใน event On Not In List ใช้ไม่ได้ msgbox ไม่ขึ้นมาเตือนครับ
2. ของ คุณUn ครับ
2.1 ตรงที่ใส่เงื่อนไข forms![ชื่อForm]!ชื่อcombobox
มันจะขึ้นรายการมาชื่อเดียวครับ คือชื่อที่มันมีอยู่
2.2 ใส่ if dcount ฯลฯ ไป msgbox ก็ไม่ขึ้นมาเตือนครับ
ขอบคุณ คุณอัน ครับ โพสไม่ได้ยังอุตส่าห์พิมพ์ใส่รูปมาโพสให้
น้ำใจงามทั้ง คุณPichaiTC คุณUn ครับ
        
    12 @R13944    
        
      
Function CheckExistCode() As Long
Dim DS As ADODB.Recordset
Dim MySQL AS String
Set DS = New ADODB.Recordset
MySQL = "SELECT * FROM ชื่อตาราง WHERE ชื่อฟิลด์ = " & "'" & Trim(ชื่อcombo) & "'" & " ORDER BY ชื่อฟิลด์ที่ต้องการจัดเรียง"
    
DS.CursorLocation = adUseClient
DS.Open MySQL, CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic, adCmdText
    
CheckExistCode = DS.RecordCount
DS.Close: Set DS = Nothing
ที่ combobox เหตุการณ์ AfterUpdate
IF CheckExistCode<=0 then
MsgBox "ใส่คำเตือนที่ต้องการ"
End if
ลองทดสอบดูครับ อาจต้องปรับ ตรง sqlStatement บ้าง
    
  
  Function CheckExistCode() As Long
Dim DS As ADODB.Recordset
Dim MySQL AS String
Set DS = New ADODB.Recordset
MySQL = "SELECT * FROM ชื่อตาราง WHERE ชื่อฟิลด์ = " & "'" & Trim(ชื่อcombo) & "'" & " ORDER BY ชื่อฟิลด์ที่ต้องการจัดเรียง"
DS.CursorLocation = adUseClient
DS.Open MySQL, CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic, adCmdText
CheckExistCode = DS.RecordCount
DS.Close: Set DS = Nothing
ที่ combobox เหตุการณ์ AfterUpdate
IF CheckExistCode<=0 then
MsgBox "ใส่คำเตือนที่ต้องการ"
End if
ลองทดสอบดูครับ อาจต้องปรับ ตรง sqlStatement บ้าง
        
    13 @R13945    
        
  
      ผมลืมปิด Function ด้วย End Function ใส่ต่อท้าย
DS.Close: Set DS = Nothing
End Function
    
  DS.Close: Set DS = Nothing
End Function
        
    14 @R13946    
        
  
      1. กำหนด จำกัดค่าในรายการ = ใช่
2. สร้าง code ใน event On Not In List ดังนี้
Private Sub Combo1_NotInList(NewData As String, Response As Integer)
MsgBox ("ไม่มีในรายการ คุณต้องการเพิ่มรายการเองหรือไม่")
Response = False 'เพื่อยกเลิก message ปกติของ combo box
End Sub
    
  2. สร้าง code ใน event On Not In List ดังนี้
Private Sub Combo1_NotInList(NewData As String, Response As Integer)
MsgBox ("ไม่มีในรายการ คุณต้องการเพิ่มรายการเองหรือไม่")
Response = False 'เพื่อยกเลิก message ปกติของ combo box
End Sub
        
    15 @R13981    
        
  
      1. ของคุณ PichaiTC
มี msgbox เตือนครับ แต่มันไม่ยอมให้ใส่ค่าที่ไม่มีในรายการ
2. ของคุณ ditasilk
มันไม่รู้จักตัวแปรนี้
Dim DS As ADODB.Recordset
ไม่ทราบผมทำอะไรผิดไปไหมทั้ง 2 กรณี
    
  มี msgbox เตือนครับ แต่มันไม่ยอมให้ใส่ค่าที่ไม่มีในรายการ
2. ของคุณ ditasilk
มันไม่รู้จักตัวแปรนี้
Dim DS As ADODB.Recordset
ไม่ทราบผมทำอะไรผิดไปไหมทั้ง 2 กรณี
        
    16 @R13982    
        
  
      ลองเล่นแบบนี้ดูนะคะ
สมมติว่า Text1 คือ Cobbo box
แล้วก็สมมติว่าใน Text1 มันมีอยู่ 5 รายการให้เลือก
โค้ดน่าจะใช้ประมาณนี้ได้นะคะ
Private Sub Text1_AfterUpdate()
If [Text1] = ("รายการที่1") Then GoTo Run
If [Text1] = ("รายการที่1") Then GoTo Run
If [Text1] = ("รายการที่1") Then GoTo Run
If [Text1] = ("รายการที่4") Then GoTo Run
If [Text1] = ("รายการที่5") Then GoTo Run
MsgBox (" ไม่มีในรายการ คุณต้องการเพิ่มรายการเองหรือไม่ "), 0, "คำเตือน"
Me.[Text1].SetFocus
Run:
ไปคำสั่งอื่นๆต่อไป
ลองดัดแปลงเล่นดูนะคะ หนูก็ยังไม่ได้ทดลองเหมือนกัน
    
    
  สมมติว่า Text1 คือ Cobbo box
แล้วก็สมมติว่าใน Text1 มันมีอยู่ 5 รายการให้เลือก
โค้ดน่าจะใช้ประมาณนี้ได้นะคะ
Private Sub Text1_AfterUpdate()
If [Text1] = ("รายการที่1") Then GoTo Run
If [Text1] = ("รายการที่1") Then GoTo Run
If [Text1] = ("รายการที่1") Then GoTo Run
If [Text1] = ("รายการที่4") Then GoTo Run
If [Text1] = ("รายการที่5") Then GoTo Run
MsgBox (" ไม่มีในรายการ คุณต้องการเพิ่มรายการเองหรือไม่ "), 0, "คำเตือน"
Me.[Text1].SetFocus
Run:
ไปคำสั่งอื่นๆต่อไป
ลองดัดแปลงเล่นดูนะคะ หนูก็ยังไม่ได้ทดลองเหมือนกัน
        
    17 @R13983    
        
  
      เรียนคุณมาลีครับ ผมไม่รู้จะใส่ End if ตรงบรรทัดไหน 
if มีหลายตัว หรือต้องใส่ให้ครบทุกตัว
    
  if มีหลายตัว หรือต้องใส่ให้ครบทุกตัว
        
    18 @R13984    
        
  
      ขอโทษครับ ก็ต้องใช้ Elseif สิครับ
แต่ปัญหาคือ
1. ข้อมูลใน รายการ combo box มีมากกว่า 1,000 รายการ
จะทำอย่างไร
2. ข้อมูลใน combo box ดึงมาจากอีกตารางซึ่งค่าอาจเปลี่ยนแปลงได้เสมอ
    
  แต่ปัญหาคือ
1. ข้อมูลใน รายการ combo box มีมากกว่า 1,000 รายการ
จะทำอย่างไร
2. ข้อมูลใน combo box ดึงมาจากอีกตารางซึ่งค่าอาจเปลี่ยนแปลงได้เสมอ
        
    19 @R13985    
        
  
      -ตามวิธีนี้ หนูลองทำแล้วไม่ต้องใส่ End if เลยค่ะ ไม่ทราบว่ามันผ่านได้อย่างไร
-รายการของคุณ กิติศักดิ์ มีมากกว่า 1.000 รายการ(ทำไมมากจัง) แถมยังมีการเปลี่ยนแปลงได้เสมออีก วิธี้นี้ ถึงแม้ได้ ก็คงจะไม่ไหวกระมัง
ต้องคิดหาวิธีอื่นแล้วละค่ะ
    
  -รายการของคุณ กิติศักดิ์ มีมากกว่า 1.000 รายการ(ทำไมมากจัง) แถมยังมีการเปลี่ยนแปลงได้เสมออีก วิธี้นี้ ถึงแม้ได้ ก็คงจะไม่ไหวกระมัง
ต้องคิดหาวิธีอื่นแล้วละค่ะ
        
    20 @R13986    
        
      
	  
      
    
      -ความเข้าใจของหนูคิดว่า คุณกิติศักดิ์ น่าจะต้องการเพียงแค่ตรวจสอบค่าในฟีลด์ Combo box ที่อยู่ในตารง B ว่ามีตามที่เราคีย์เข้าไปหรือไม่ 
-หากไม่มี ก็ให้เพียงขึ้น msg แจ้งให้ทราบเท่านั้น
-หากเป็นตามที่หนูเ้ข้าใจ ลองเปลี่ยนมาใช้วิธีตรวจสอบค่าแทนจะดีกว่าไหมคะ
-สมมติว่าที่ฟอร์ม มี Text1 สำหรับคีย์ข้อมูล
    
  -หากไม่มี ก็ให้เพียงขึ้น msg แจ้งให้ทราบเท่านั้น
-หากเป็นตามที่หนูเ้ข้าใจ ลองเปลี่ยนมาใช้วิธีตรวจสอบค่าแทนจะดีกว่าไหมคะ
-สมมติว่าที่ฟอร์ม มี Text1 สำหรับคีย์ข้อมูล
Private Sub Text1_AfterUpdate()     
If IsNull(DLookup("[ฟิลด์คอมโบในตารางB]", "[ตารางB]", "[ฟิลด์คอมโบในตารางB] Like '" & Text1 & "'")) Then
MsgBox (" ไม่มีในรายการ คุณต้องการเพิ่มรายการเองหรือไม่     "), 0, "คำเตือน" 
End If
    
      Time: 0.5085s
    
      
		