ใส่ค่าใน combo box ถ้าไม่มีในรายการ ให้แจ้งเตือน
กระทู้เก่าบอร์ด อ.Yeadram

 5,354   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 ครับ
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
7 @R13939
ลองตัดเป็นช่วงๆ ดูนะครับ

สมมุติ ฟอร์มที่คุณทำชื่อ 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 ครับ
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 บ้าง
13 @R13945
ผมลืมปิด Function ด้วย 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
15 @R13981
1. ของคุณ PichaiTC
มี 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:
ไปคำสั่งอื่นๆต่อไป

ลองดัดแปลงเล่นดูนะคะ หนูก็ยังไม่ได้ทดลองเหมือนกัน
17 @R13983
เรียนคุณมาลีครับ ผมไม่รู้จะใส่ End if ตรงบรรทัดไหน
if มีหลายตัว หรือต้องใส่ให้ครบทุกตัว
18 @R13984
ขอโทษครับ ก็ต้องใช้ Elseif สิครับ

แต่ปัญหาคือ
1. ข้อมูลใน รายการ combo box มีมากกว่า 1,000 รายการ
จะทำอย่างไร
2. ข้อมูลใน combo box ดึงมาจากอีกตารางซึ่งค่าอาจเปลี่ยนแปลงได้เสมอ
19 @R13985
-ตามวิธีนี้ หนูลองทำแล้วไม่ต้องใส่ End if เลยค่ะ ไม่ทราบว่ามันผ่านได้อย่างไร
-รายการของคุณ กิติศักดิ์ มีมากกว่า 1.000 รายการ(ทำไมมากจัง) แถมยังมีการเปลี่ยนแปลงได้เสมออีก วิธี้นี้ ถึงแม้ได้ ก็คงจะไม่ไหวกระมัง
ต้องคิดหาวิธีอื่นแล้วละค่ะ
20 @R13986
-ความเข้าใจของหนูคิดว่า คุณกิติศักดิ์ น่าจะต้องการเพียงแค่ตรวจสอบค่าในฟีลด์ Combo box ที่อยู่ในตารง B ว่ามีตามที่เราคีย์เข้าไปหรือไม่
-หากไม่มี ก็ให้เพียงขึ้น msg แจ้งให้ทราบเท่านั้น
-หากเป็นตามที่หนูเ้ข้าใจ ลองเปลี่ยนมาใช้วิธีตรวจสอบค่าแทนจะดีกว่าไหมคะ
-สมมติว่าที่ฟอร์ม มี Text1 สำหรับคีย์ข้อมูล

Private Sub Text1_AfterUpdate()     
If IsNull(DLookup("[ฟิลด์คอมโบในตารางB]", "[ตารางB]", "[ฟิลด์คอมโบในตารางB] Like '" & Text1 & "'")) Then
MsgBox (" ไม่มีในรายการ คุณต้องการเพิ่มรายการเองหรือไม่     "), 0, "คำเตือน"
End If
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3175s