สมัครสมาชิก
 

รบกวนสอบถามเกี่ยวกับการใช้ combo ในการเพิ่มข้อมูลใน form



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

11 ม.ค. 62 , 15:07:16
อ่าน 302 ครั้ง

jangthekop

  • สมาชิกไท.Access
  • กระทู้: 6

  • ขอบคุณ ไท.Access

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

ถ้าต้องการเพิ่มข้อมูลที่นอกเหนือจากที่มีในตัวเลือก แล้วให้ข้อมูลนั้นไปบันทึกในตารางที่ใช้อ้างอิงได้มั้ยคะ

 

11 ม.ค. 62 , 16:16:46
ตอบกลับ #1

ปิ่นณรงค์

  • ผู้ชำนาญการไท.Access
  • *
  • กระทู้: 546
  • พลังขอบคุณ: 449

  • Programer สาย DIY (ไม่ใช่อาจารย์นะครับ)

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

ถ้าต้องการเพิ่มข้อมูลที่นอกเหนือจากที่มีในตัวเลือก แล้วให้ข้อมูลนั้นไปบันทึกในตารางที่ใช้อ้างอิงได้มั้ยคะ

ลองดูตัวอย่างนี้ครับ รายละเอียดตัว Control
Combobox  : รายชื่อ ผมสร้างชื่อ  Cb_ItemList
ชื่อตาราง       : TblItem_List
                    มีฟิลล์  Item_ID  และ Item_NAME
Textbox      : ไว้สำหรับรองรับ Cursor ไว้เฉยๆ ครับ ตั้งชื่อ Textbox2
คุณสามารถ เพิ่มรายการเข้าไปได้ทันที โดยเมื่อคุณใส่รายการใหม่เข้าไปจะมีการแจ้งเตือน


เมื่อตอบ Yes ก็จะบันทึกไปที่ตารางทันที

โค๊ด: [Select]
Private Sub Cb_ItemList_GotFocus()
Me.Cb_ItemList.Requery
End Sub

Private Sub Cb_ItemList_NotInList(NewData As String, Response As Integer)
    Dim i As Integer
    Dim Msg As String
 
 
  'ให้โปรแกรมแจ้งเตือนเมื่อเจอ ข้อมูลที่ไม่มีในรายการ
    If NewData = "" Then Exit Sub
    Msg = "'" & NewData & "' ไม่มีในรายการ" & vbCr & vbCr
    Msg = Msg & "ต้องการเพิ่มรายการใหม่ ?"
    i = MsgBox(Msg, vbQuestion + vbYesNo, "Checked")
   
'ถ้าเราตอบ Yes จะเริ่มการบันทึกลงไปในตารางทันที
    If i = vbYes Then
    Dim DB As Database
    Dim rs As Recordset
    Dim LastID As Integer
   
   
            Set DB = CurrentDb()
            Set rs = DB.OpenRecordset("TblItem_List", DB_OPEN_DYNASET) ' TblItem_List คือชื่อตารางที่จะเพิ่มรายการ
           
            LastID = DMax("Item_ID", "TblItem_List")  'ตรงส่วนนี้คือการหาค่า ID ล่าสุดที่มีอยู่แล้วนำมา +1 เพื่อไม่ให้ซ้ำกัน
            LastID = LastID + 1
           
    rs.AddNew
    rs![Item_ID] = LastID  'Item_ID คือ ฟิลล์ Item_ID ในตาราง
    rs![Item_Name] = NewData    'Item_Name คือ ฟิลล์ Item_Nameในตาราง
    rs.Update
    Set rs = Nothing
    Set DB = Nothing
   
    MsgBox "ADD  :  " & NewData & "  Success", vbInformation, "status"
            Response = acDataErrContinue
            Me.Cb_ItemList = Null
            Me.textbox2.SetFocus
    Else
            Response = acDataErrContinue
 End If
           
End Sub
             
« แก้ไขครั้งสุดท้าย: 11 ม.ค. 62 , 16:51:35 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

11 ม.ค. 62 , 17:10:52
ตอบกลับ #2

jangthekop

  • สมาชิกไท.Access
  • กระทู้: 6

  • ขอบคุณ ไท.Access

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

ได้แล้วค่ะ ขอบคุณอาจารย์ปิ่นณรงค์มาก ๆ เลยนะคะ  :prettiness:

รบกวนสอบถามอาจารย์ต่อนะคะ  :grin: ถ้าเป็นแบบฟอร์มหลักและฟอร์มย่อยสามารถทำทั้งในฟอร์มหลักและฟอร์มย่อยได้เลยมั้ยคะ
อีกอย่างคือในตารางมีข้อมูลมากกว่า 2 ฟิลด์ (เช่น แบบของอาจารย์ Item_ID  และ Item_NAME และ Item_cat) ประมาณนี้นะค่ะ
ต้องแบบไหนหรอคะ

 

11 ม.ค. 62 , 17:22:29
ตอบกลับ #3

ปิ่นณรงค์

  • ผู้ชำนาญการไท.Access
  • *
  • กระทู้: 546
  • พลังขอบคุณ: 449

  • Programer สาย DIY (ไม่ใช่อาจารย์นะครับ)

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

ที่จริง ผมว่าเมื่อไม่เจอรายการ ก็ให้เปิดฟอร์ม มาเพิ่มนรายการดีกว่า เพราะถ้าจะเพิ่ม ฟิลล์ cat ด้วยท่านจะกรอกตรงไหนละคับ ผมเลยคิดว่าให้เปิดฟร์อมรายการมาเพิ่มรายการใหม่จะดีกว่าคับ เมื่อเพิ่มรายการมหม่ก็ให้ไปแสดงรายการในคอมโบบ๊อก ทันที เดี่ยวลองทำตัวอย่างให้ดูคับ
« แก้ไขครั้งสุดท้าย: 11 ม.ค. 62 , 17:28:58 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

11 ม.ค. 62 , 17:53:52
ตอบกลับ #4

jangthekop

  • สมาชิกไท.Access
  • กระทู้: 6

  • ขอบคุณ ไท.Access

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

เอาง่าย ๆ แบบที่อาจารย์บอกก็คือ ถ้าเราจะทำการเพิ่มนอกเหนือจากรายการที่มีอยู่ก็สามารถเพิ่มได้ฟิลล์เดียวแบบนั้นใช่มั้ยคะ และถ้ามากกว่า 1 ฟิลล์ก็ทำการเปิดฟอร์มใหม่ขึ้นมาแล้วเพิ่มรายการเข้าไปแทน แบบนั้นใช่มั้ยคะอาจารย์ :grin:

 

12 ม.ค. 62 , 00:14:05
ตอบกลับ #5

ปิ่นณรงค์

  • ผู้ชำนาญการไท.Access
  • *
  • กระทู้: 546
  • พลังขอบคุณ: 449

  • Programer สาย DIY (ไม่ใช่อาจารย์นะครับ)

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



ตัวอย่างนี้ใช้ได้กับ Form หลัก หรือ Subform ได้หมด ครับ
เพราะเป็นการกำหนด Event ของตัว Control ครับ โดยผมได้สร้างตัวอย่างกรณีที่เป็น SubForm ไว้แล้วด้วยครับ แต่ผมยังให้มันไปเพิ่มที่ตารางเดิมอยู่ แต่สามารถเปลี่ยนได้ตามต้องการคับ

ส่วนการเพิ่ม Item_cat เมื่อกด Yes เพื่อจะเพิ่มรายการให้แล้วก็ให้แสดง InputBox ขึ้นมาเพื่อรับค่าของ Item_Cat อีก Field แล้วจึงบันทึกค่าลงไปในตารางครับ


โค๊ด: [Select]
Option Compare Database

Private Sub Cb_ItemList_GotFocus()
Me.Cb_ItemList.Requery
End Sub

Private Sub Cb_ItemList_NotInList(NewData As String, Response As Integer)
    Dim i As Integer
    Dim Msg As String
 
  'ให้โปรแกรมแจ้งเตือนเมื่อเจอ ข้อมูลที่ไม่มีในรายการ
    If NewData = "" Then Exit Sub
    Msg = "'" & NewData & "' ไม่มีในรายการ" & vbCr & vbCr
    Msg = Msg & "ต้องการเพิ่มรายการใหม่ ?"
    i = MsgBox(Msg, vbQuestion + vbYesNo, "Checked")
   
'ถ้าเราตอบ Yes จะเริ่มการบันทึกลงไปในตารางทันที
    If i = vbYes Then
    Dim addItem_Cat As String
    addItem_Cat = InputBox("กำลังจะเพิ่มรายการ " & NewData & vbCrLf & "กรุณาระบุค่า..:", "เพิ่มค่าสำหรับ Field ITEM_Cat")
    If Not IsNull(Me.Cb_ItemList) And addItem_Cat <> "" Then
            Set DB = CurrentDb()
            Set rs = DB.OpenRecordset("TblItem_List", DB_OPEN_DYNASET) ' TblItem_List คือชื่อตารางที่จะเพิ่มรายการ
           
            LastID = Dmax("Item_ID", "TblItem_List")  'ตรงส่วนนี้คือการหาค่า ID ล่าสุดที่มีอยู่แล้วนำมา +1 เพื่อไม่ให้ซ้ำกัน
            LastID = LastID + 1
           
    rs.AddNew
    rs![Item_ID] = LastID  'Item_ID คือ ฟิลล์ Item_ID ในตาราง
    rs![Item_Name] = NewData    'Item_Name คือ ฟิลล์ Item_Nameในตาราง
    rs![Item_Cat] = addItem_Cat
    rs.Update
   
    Set DB = Nothing
    Set rs = Nothing
    MsgBox "ADD  :  " & NewData & "  Success", vbInformation, "status"
            Response = acDataErrContinue
            Me.Cb_ItemList.Undo
            Me.textbox2.SetFocus
 End If
 Else
    Response = acDataErrContinue
 End If
End Sub
             

« แก้ไขครั้งสุดท้าย: 14 ม.ค. 62 , 14:48:59 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

13 ม.ค. 62 , 19:06:40
ตอบกลับ #6

jangthekop

  • สมาชิกไท.Access
  • กระทู้: 6

  • ขอบคุณ ไท.Access

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

 :love: :prettiness:

ขอบคุณค่ะอาจารย์เดี๋ยวลองทำดูแล้วจะมารายงานอีกรอบนะคะ
อีกอย่างหนึ่งค่ะ ขอสอบถามอาจารย์เกี่ยวกับคำสั่งตรงนี้นะค่ะ  :grin: :grin: ความหมายคืออะไรหรอคะ

ขอบคุณค่ะ :love: :love: :love:

 

13 ม.ค. 62 , 21:02:34
ตอบกลับ #7

jangthekop

  • สมาชิกไท.Access
  • กระทู้: 6

  • ขอบคุณ ไท.Access

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

สวัสดีค่ะอาจารย์ ทำได้แล้วค่ะ แต่พอทำเหมือนกันแต่เป็นที่ SubForm จะขึ้นแบบตามรูปภาพนะค่ะ
*** แต่ข้อมูลที่เราเพิ่มไปบันทึกในตารางแล้วนะคะ แต่ไม่แสดงที่ตัวเลือกเหมือนฟอร์มหลักนะค่ะ ไม่แน่ใจว่าผิดตรงไหนรึเปล่าคะ
รบกวนอาจารย์แนะนำด้วยนะคะ...ขอบคุณค่ะ :love: :love: :love: :prettiness: :prettiness:

 

14 ม.ค. 62 , 08:11:46
ตอบกลับ #8

ปิ่นณรงค์

  • ผู้ชำนาญการไท.Access
  • *
  • กระทู้: 546
  • พลังขอบคุณ: 449

  • Programer สาย DIY (ไม่ใช่อาจารย์นะครับ)

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

สวัสดีค่ะอาจารย์ ทำได้แล้วค่ะ แต่พอทำเหมือนกันแต่เป็นที่ SubForm จะขึ้นแบบตามรูปภาพนะค่ะ
*** แต่ข้อมูลที่เราเพิ่มไปบันทึกในตารางแล้วนะคะ แต่ไม่แสดงที่ตัวเลือกเหมือนฟอร์มหลักนะค่ะ ไม่แน่ใจว่าผิดตรงไหนรึเปล่าคะ
รบกวนอาจารย์แนะนำด้วยนะคะ...ขอบคุณค่ะ :love: :love: :love: :prettiness: :prettiness:

แก้จาก Me.CB_รหัสวัสดุ = null
เป็น  Me.CB_รหัสวัสดุ.Undo 

ความต้องการคือเมื่อบันทึกค่าใหม่เข้าไปแล้วให้ย้อนกลับไปแสดงรายการปกติและมีรายการใหม่แสดงอยู่ด้วยครับ

:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

14 ม.ค. 62 , 08:24:37
ตอบกลับ #9

ปิ่นณรงค์

  • ผู้ชำนาญการไท.Access
  • *
  • กระทู้: 546
  • พลังขอบคุณ: 449

  • Programer สาย DIY (ไม่ใช่อาจารย์นะครับ)

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

:love: :prettiness:

ขอบคุณค่ะอาจารย์เดี๋ยวลองทำดูแล้วจะมารายงานอีกรอบนะคะ
อีกอย่างหนึ่งค่ะ ขอสอบถามอาจารย์เกี่ยวกับคำสั่งตรงนี้นะค่ะ  :grin: :grin: ความหมายคืออะไรหรอคะ

ขอบคุณค่ะ :love: :love: :love:

ตรง Set DB = Nothing
      Set rs = Nothing   

ปกติ เมื่อเราเรียกใช้ หรืออ้างอิงไปยัง Record หรือ database ตัวไหนเมื่อเรียกใช้งานเสร็จแล้วก็ควรจะสั่งปิด หรือยกเลิกการเรียกใช้ไปครับ
DB คือ การกำหนดเรียกใช้ อ้างอิง database
RS คือเรียกใช้อ้างอิง Recordset


MsgBox "ADD  :  " & NewData & "  Success", vbInformation, "status"
เป็นการสร้างกล่องข้อความตอบโต้เพื่อแสดงข้อความว่าได้เพิ่มข้อมูลใหม่ลงไปเสร็จแล้วครับ

Response = acDataErrContinue

ปกติเมื่อใช้ combobox แล้วเมื่อไม่มีรายการจะมีข้อความของระบบ แจ้งว่าข้อมูลไม่ได้อยู่ในรายการ ซึ่งคำสั่งนี้ สั่งปิดข้อความแจ้งเตือนครับ

Me.textbox2.SetFocus
SetFocus คือ การกำหนดว่าให้ Cursor ไปแสดงที่ Control ตัวไหน
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

14 ม.ค. 62 , 09:42:34
ตอบกลับ #10

jangthekop

  • สมาชิกไท.Access
  • กระทู้: 6

  • ขอบคุณ ไท.Access

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

 :love: :love: :love: :love:
ทำได้แล้วค่ะอาจารย์ ขอบคุณอาจารย์มาก ๆ เลยนะคะที่ช่วยแนะนำเกี่ยวกับการเพิ่มข้อมูลผ่าน combo box
ตอบโจทย์ได้ชัดเจนเลยละค่ะ

ขอบคุณอาจารย์มาก ๆ นะคะ :nice day: :smile:

 


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