นำข้อมูลจากตารางกลับมาแสดงบน Combobox อีกครั้งเพื่อแก้ไข



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

29 ม.ค. 61 , 09:35:51
อ่าน 806 ครั้ง

ปิ่นณรงค์

สวัสดีครับอาจารย์ทุกท่าน !
ผมรบกวนสอบถามวิธีการนำข้อมูลจากตารางซึ่งในไอดีเดียวกันมีหลายเขตข้อมูล
กลับมาแสดงบน Combobox อีกครั้งเพื่อแก้ไข ในหน้าฟอร์มแก้ไข
ข้อมูลในตารางเป็นแบบนี้ครับ


เราสามารถนำข้อมูลเหล่านี้กลับไปแก้ไขที่ฟอร์ม โดยมีกำหนดให้ถ้าในตารางมีข้อมูลกี่รายการก็ให้แสดง ComboBox ของข้อมูลในตารางทีละรายการ

สามารถทำได้ไหมครับให้แสดงข้อมูลประมาณนี้


ขอบคุณครับ
:love: :grin:
 

29 ม.ค. 61 , 20:22:32
ตอบกลับ #1

สันติสุข

1. ก่อนอื่น ถ้าดูจากลักษณะงาน ขอถามก่อนว่า น่าจะมีอีกฟิลด์ที่บอกว่าทำงานไหนเป็นลำดับที่เท่าไหร่ใช่ไหมครับ จากภาพก็ตีความได้ว่าบรรทัดแรกก็เป็นงานแรก เรียงต่อๆกันไปจนบรรทัดสุดท้ายซึ่งเป็นงานสุดท้าย แต่ถ้าไม่มี ก็จะเกิดปัญหาเพราะไม่รู้ว่าเรคอร์ดไหนเป็นลำดับที่เท่าไหร่ ส่วนค่าของฟิลด์นี้ แนะนำว่าไม่ควรใส่เรียงต่อกัน อย่าง 1,2,3,... แต่ควรแยกเป็นระยะเช่น 10,20,30,... เพื่อจุดประสงค์ให้ง่ายต่อการแก้ไขลำดับการทำงาน เพราะเราจะแทรกลำดับ เช่น แทรกลำดับที่ 2 ด้วยค่า 15 ไปได้เลย แต่ถ้าเป็นเลขติดกันอย่าง 1,2,3,... เราก็ต้องมาเปลี่ยนค่าตั้งแต่ลำดับที่ 2 ไปจนหมดทุกลำดับ ซึ่งไม่เหมาะในทางปฏิบัติ

2. การเอาข้อมูลมาใส่คอมโบบ็อกซ์ตามที่ต้องการนั้น ทำได้ แต่ Access ไม่สามารถสร้างคอมโบบ็อกซ์ได้ระหว่างที่หน้าฟอร์มทำงาน ทำได้เฉพาะในระหว่างดีไซน์หน้าฟอร์มเท่านั้น ดังนั้นถ้าอยากทำวิธีนี้จริงๆ ก็ต้องสร้างคอมโบบ็อกซ์ไว้ให้มากเท่าที่จะรองรับจำนวนข้อมูลที่คิดว่ามีในแต่ละ ID ได้ แต่จะซ่อนเอาไว้ไม่ให้แสดง พออ่านข้อมูลจริง ก็ค่อยอ่านทีละเรคอร์ดแล้วกำหนดค่าลงคอมโบบ็อกซ์ทีละตัว พร้อมแสดงคอมโบบ็อกซ์ออกมาให้เห็น

3.อย่างไรก็ตาม ผมเห็นว่าถ้าเราเอาข้อมูลมาแสดงออก Continuous Form หรือ Datasheet Form ไปเลยน่าจะง่ายกว่าครับ ตรงไปตรงมา เพราะมีกี่เรคอร์ด ก็แสดงออกมาเท่านั้นบรรทัดโดยอัตโนมัติ จะเพิ่ม/ลบเรคอร์ดก็ทำได้เลย

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

30 ม.ค. 61 , 08:10:19
ตอบกลับ #2

ปิ่นณรงค์

เรียนอาจารย์ สันติสุข ในรูปแบบที่ 3 ผมสามารถทำได้แล้วครับอาจารย์ แต่ ที่ผมอยากทำเป็นคือ
หัวข้อที่ 2ครับ
ComboBox ของ ข้อมูลส่วนนี้สามารถใส่ได้ 36 Combobox ตอนเก็บข้อมูลเข้าไป ผมใช้คำสั่ง For I ครับ
เราสามารถกำหนดได้หรือไม่คับว่าถ้ามีข้อมูล ก็ให้แสดงข้อมูลตามที่มีอยู่ใน ไอดี ที่เหลือก็ให้ .Visible = false ไว้
(ข้อมูลในตาราง นั้นในคนไข้แต่ละรายจะทำหัตถการไม่เกิน 36 รายการครับ)
:love: :grin:
 

30 ม.ค. 61 , 12:25:16
ตอบกลับ #3

สันติสุข

- เราต้องกำหนดชื่อคอมโบบ็อกซ์เอาไว้โดยให้มีตัวเลข 01 - 36 เป็นเลขต่อท้าย ในโค้ดตัวอย่างนี้ สมมุติกำหนดชื่อเป็น cb01 - cb36 ก็แล้วกัน
- คุณต้องไปแทน xxx ด้วยเท็กซ์บ็อกซ์หรือตัวแปรที่ให้ค่าของ ID ที่ต้องการ
- และแทน yyy ด้วยฟิลด์ลำดับที่ของ Procedure ใน ID นั้น
- โค้ดนี้ไม่ได้ทดสอบนะครับ ลองทดสอบดูแล้วกัน โค้ดนี้ให้ใส่ในฟอร์มที่เราต้องการนี่แหล่ะ และเวลาเรียกใช้ก็เขียน Call AssignProcedure เท่านั้น

Private Sub AssignProcedure()
    Dim DB As DAO.Database
    Dim RS As DAO.Recordset
    Dim I As Integer
    Dim S As String

    Set DB = CurrentDb
    Set RS = DB.OpenRecordset("select * from tblMedical_Records where ID = '" + xxx + "' order by yyy")
    I = 1
    Do Until I > 36
        S = Format$(I, "00")
        If RS.EOF Then
            Me("cb" + S).Visible = False
        Else
            Me("cb" + S).Visible = True
            Me("cb" + S) = RS("Procedure_Code")
            RS.MoveNext
        End If
        I = I + 1
    Loop
    RS.Close: Set RS = Nothing
End Sub
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

30 ม.ค. 61 , 15:29:19
ตอบกลับ #4

ปิ่นณรงค์

ใช้งานได้จริงครับขอบคุณอาจารย์สันติสุข มากๆ ครับ  :fake smile:

รบกวนอีก 1 คำถามครับอาจารย์สันติสุข
เมื่อแสดงผลออกมาได้แล้ว เมื่อมีการแก้ไขข้อมูลบนหน้าฟอร์มแล้ว เราต้องการ Update ข้อมูลที่แก้ไขลงตารางเดิมต้องทำอย่างไรครับ
« แก้ไขครั้งสุดท้าย: 30 ม.ค. 61 , 16:45:14 โดย bookungth »
:love: :grin:
 


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