แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - jangthekop

หน้า: [1]
1
: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 ตัวไหน
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

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

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

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

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

3


ตัวอย่างนี้ใช้ได้กับ 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
             

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

4
ที่จริง ผมว่าเมื่อไม่เจอรายการ ก็ให้เปิดฟอร์ม มาเพิ่มนรายการดีกว่า เพราะถ้าจะเพิ่ม ฟิลล์ cat ด้วยท่านจะกรอกตรงไหนละคับ ผมเลยคิดว่าให้เปิดฟร์อมรายการมาเพิ่มรายการใหม่จะดีกว่าคับ เมื่อเพิ่มรายการมหม่ก็ให้ไปแสดงรายการในคอมโบบ๊อก ทันที เดี่ยวลองทำตัวอย่างให้ดูคับ
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

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

ลองดูตัวอย่างนี้ครับ รายละเอียดตัว 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
             
โพสต์นี้ได้รับคำขอบคุณจาก: jangthekop

หน้า: [1]