สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน



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

02 มี.ค. 61 , 11:09:18
อ่าน 946 ครั้ง

prajak

รบกวนปรึกษาครับ กรณีข้อมูลในตารางมีฟิวที่เราต้องการLookup ซ้ำกัน (ตามรูป) และเรายังมีความจำเป็นที่ข้อมูลจะต้องซ้ำกัน เราจะมีวิธีการยังไงได้บ้างครับ ตัวอย่างเช่น ในรูปตอนที่เรา คลิกdropdown บนform เพื่อเลือก PD# แต่ใน table มี PD#นี้อยู่2 Reccord มันจะสามารถมี popup บอกให้เราได้หรือเปล่า เช่น "มีข้อมูล PD#นี้มากกว่า1" แล้วอาจจะให้มีตัวเลือกว่าจะเลือกเอารายการไหน ระหว่าง record ที่1 หรือ 2
ขอไอเดียหรือข้อมูลเพื่อเป็นแนวทางครับ



 

03 มี.ค. 61 , 11:28:11
ตอบกลับ #1

OddyWriter

> สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #1 เมื่อ: 03 มี.ค. 61 , 11:28:11 »
ให้กำหนด Row Source ของฟิลด์ PDno โดยใส่ฟิลด์ของ PD# และ PO จากตาราง Production

ให้แสดงทั้ง 2 คอลัมน์ (Column Count = 2)
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

07 มี.ค. 61 , 16:03:29
ตอบกลับ #2

prajak

> สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #2 เมื่อ: 07 มี.ค. 61 , 16:03:29 »
กลับมาแล้วครับอาจารย์ OddyWriter กรณีตามรูป

ผมกำหนด Row source ให้กับ combo StyleNo ทั้งหมด5 column จะเห็นว่า Style GIGAU มีทั้งหมด2รายการ ซึ่งยอดจะไม่เหมือนกัน หากผมต้องการเลือก GIGAU ตัวที่2 ซึ่งยอดเท่ากับ 772.00 จะต้องทำยังไงครับ
ถ้าใช้คำสั่ง
Private Sub StyleNo_AfterUpdate()
[OD#] = DLookup("[OD #]", "[Production]", "[Style]=[StyleNo]")
[Customers] = DLookup("[Buyer]", "[Production]", "[Style]=[StyleNo]")
[QtyOrder] = DLookup("[QTY PCS]", "[Production]", "[Style]=[StyleNo]")
End Sub

มันก็จะได้ยอดของรายการแรกเท่านั้นครับ

 

07 มี.ค. 61 , 18:24:40
ตอบกลับ #3

PookPuy

> สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #3 เมื่อ: 07 มี.ค. 61 , 18:24:40 »
ลองเปลี่ยนเป็นใช้วิธีส่งค่าจากที่เลือกไปยังกล่องข้อความดูครับ
โค๊ด: [Select]
Private Sub StyleNo_Click()
       OD#.Value = StyleNo.Column(1)
       Customers.Value = StyleNo.Column(2)
       QtyOrder.Value = StyleNo.Column(3)
End Sub

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

07 มี.ค. 61 , 19:08:41
ตอบกลับ #4

OddyWriter

> สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #4 เมื่อ: 07 มี.ค. 61 , 19:08:41 »
ต้องอธิบายอย่างนี้นะครับ บางครั้งการใช้ Query นั้น บางครั้งสามารถจัดการอะไรๆ ในฟอร์มได้ดีกว่า VBA ดังนั้นอยากจะบอกว่า เพียง Query ก็ได้อย่างที่ต้องการแล้วครับ

จาก Combo Box ที่คุณสร้างนั้น ถ้าเป็นผมจะใส่ ID ให้แต่ละเรคอร์ด เพราะ Access นั้นแยกไม่ออกหรอกครับว่า GAGIU ที่เราต้องการนั้นคืออันไหน เค้าเจออันไหนก่อนเค้าก็หยิบอันนั้นมาแสดงผลทันที

การแก้ไขง่ายมากครับ
1. กำหนดให้แต่ละเรคอร์ดมี ID ของตัวเอง
2. นำข้อมูลมาใส่ใน Row Source ของ Combo Box โดยใส่ ID เข้าไปด้วย
3. กำหนด Column Width ของ Row Source ตามที่เราต้องการ โดยกำหนดให้ Column Width ของ ID เป็น 0
เช่น เรานำฟิลด์มาใช้ 3 ฟิลด์คือ ID, Desc,Date เราก็กำหนด Column Width เป็น 0,1,1 อะไรงี้
4. จากข้อ 3 ให้กำหนด Bound Column เป็น 1 เพื่อนำไปใช้งาน

ส่วนช่องอื่นๆ คุณก็ไม่จำเป็นต้องเขียน Code ใน AfterUpdate เลยครับ แค่เอา Dlookup ไปใส่ใน Control Source โดยกำหนด Criteria ของ Dlookup ให้เทียบค่ากับ Combo Box ครับ

ด้วยวิธีนี้ การทำงานจะเร็วกว่า เพราะ Dlookup ทำงานเองโดยตรง ไม่ต้องผ่าน VBA แล้วเอาค่าจะ VBA มาใส่ใน Text Box
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

08 มี.ค. 61 , 10:47:22
ตอบกลับ #5

pizza_p

> สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #5 เมื่อ: 08 มี.ค. 61 , 10:47:22 »
ตามที่คุณ PookPuy ตอบมาเลยครับ กรณีที่มี combobox แล้วตัว combobox มีการ populate data มาจากตารางที่ต้องการอยู่แล้ว แล้วจะกำหนดให้ฟิลด์อื่นๆมีค่าตาม data ใน combobox ก็แค่เพียงกำหนดให้ฟิลด์นั้นมีค่าเท่ากับ column(0), column(1), column(2)...โดยที่ไม่ได้ต้องไป dlookup ข้อมูลในตารางอีก แต่ผมแนะนำผูกไว้กับ AfterUpdate event

Private Sub StyleNo_AfterUpdate()
       OD#.Value = StyleNo.Column(1)
       Customers.Value = StyleNo.Column(2)
       QtyOrder.Value = StyleNo.Column(3)
End Sub

ปล. ทำไมถึงไม่ bound Table หรือ Query ไว้กับฟอร์มเลย จะได้ให้ Access มันใส่ค่าให้อัตโนมัติ (หรือต้องการเขียนเผื่อสำหรับ upsize ไป MS SQL)

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

08 มี.ค. 61 , 13:21:26
ตอบกลับ #6

prajak

> > สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #6 เมื่อ: 08 มี.ค. 61 , 13:21:26 »
ตามที่คุณ PookPuy ตอบมาเลยครับ กรณีที่มี combobox แล้วตัว combobox มีการ populate data มาจากตารางที่ต้องการอยู่แล้ว แล้วจะกำหนดให้ฟิลด์อื่นๆมีค่าตาม data ใน combobox ก็แค่เพียงกำหนดให้ฟิลด์นั้นมีค่าเท่ากับ column(0), column(1), column(2)...โดยที่ไม่ได้ต้องไป dlookup ข้อมูลในตารางอีก แต่ผมแนะนำผูกไว้กับ AfterUpdate event

Private Sub StyleNo_AfterUpdate()
       OD#.Value = StyleNo.Column(1)
       Customers.Value = StyleNo.Column(2)
       QtyOrder.Value = StyleNo.Column(3)
End Sub

ปล. ทำไมถึงไม่ bound Table หรือ Query ไว้กับฟอร์มเลย จะได้ให้ Access มันใส่ค่าให้อัตโนมัติ (หรือต้องการเขียนเผื่อสำหรับ upsize ไป MS SQL)
ทำตามที่แนะนำได้แล้วครับ แต่จะรบกวนสอบถามเพิ่มเติมนะครับ เราสามารถกำหนดความกว้างของ column แต่ละตัว ตามรูปได้หรือเปล่าครับ เช่นขยายช่อง StyleNo ให้กว้างขึ้น

 

08 มี.ค. 61 , 13:46:06
ตอบกลับ #7

pizza_p

> สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #7 เมื่อ: 08 มี.ค. 61 , 13:46:06 »

 

08 มี.ค. 61 , 15:32:36
ตอบกลับ #8

prajak

> สอบถามการใช้ Dlookup กรณีที่ข้อมูลซ้ากัน
« ตอบกลับ #8 เมื่อ: 08 มี.ค. 61 , 15:32:36 »
ทำได้แล้วครับ ขอบคุณ คุณOddyWriter ผมจะนำไปเป็นแนวทางในการ Design ในครั้งต่อไปนะครับ,ขอบคุณคุณ PookPuy และคุณ pizza_p มากครับ เพราะผมออกแบบมาเป็นลักษณะนี้แล้วเลยใช้วิธีของท่านทั้งสองก่อนครับ

 


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