เพิ่มข้อมูลจาก table2 ไปยัง table1
กระทู้เก่าบอร์ด อ.Yeadram

 2,226   5
URL.หัวข้อ / URL
เพิ่มข้อมูลจาก table2 ไปยัง table1

รบกวนสอบถามดังนี้
table1 มี CustId , CustName, CustAddress
table2 มี OrderID, CustId, CustOrder, OrderDate
มีฟิลด์ CustID ทำ relationship กัน

- ทำ form   table1 เป็น Mainform table2 เป็น Subform โดยใช้ CustId เป็นตัวลิงค์
โดยใน Subform จะแสดงให้ใส่ข้อมูลแบบนี้   เลขที่สั่ง,   ชื่อลูกค้า, วันที่สั่ง
แต่เวลาเก็บข้อมูล table2 จะเก็บ OrderId, CustId, OrderDate โดยในส่วนของ ชื่อลูกค้า
ถ้าเรากรอกลูกค้าเก่า ก็ให้มันเก?บ CustId ที่มีอยู่แล้ว
- ถ้าเป็นชื่อลูกค้าใหม่ ก็อยากให้มันไปเพิ่มข้อมูลใน table1 โดยให้เพิ่มรหัสต่อท้าย และเพิ่มชื่อลูกค้าลงไป
เสร็จแล้วนำ CustId นั้นไปใส่ไว้ใน table2 ด้วยครับ

5 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R00156
ลักษณะการทำงานที่ต้องการ คือต้องการ ถ้าเคยมีลูกค้า ก็ทำงานปกติ ถ้าไม่เคยมีลูกค้าให้เพิ่มชื่อลูกค้าเข้าฐานข้อมูลก่อน ค่อยทำงานต่อ ตามปกติ

ฟอร์มนี้ใช้เพื่อการเพิ่มข้อมูลอย่างเดียว ก็ไม่น่ามีปัญหา แต่ถ้าใช้ฟอร์มเดียวกันนี้เพื่อให้โชว์ข้อมูลด้วยเมื่อผู้ใช้เลื่อนเรคคอร์ดไปที่เรคคอร์ดก่อนหน้า อาจต้องเขียนโค้ดกำกับหลายจุด ตามความเข้าใจ source ของฟอร์มย่อย คือ table2 แต่ใน table2 มีแต่รหัสลูกค้า ไม่มีชื่อลูกค้าในนั้น คุณจะใช้คอนโทรลอะไรแสดงชื่อลูกค้า จะทำเป็น bound control หรือ unbound แล้วเขียนโค้ดกำกับก็ได้ แต่ต้องเลือกมาก่อน เพราะจะเกี่ยวข้องกับการวางแผนคำสั่ง ให้ทำงานตามลำดับเหตุการณ์

คอนโทรลในส่วน "แสดง" ชื่อลูกค้า กับคอนโทรลในส่วน "รับ" ชื่อลูกค้า เป็นคอนโทรลตัวเดียวกันหรือไม่ และใช้คอนโทรลอะไรดี textbox, combobox, listbox

โดยส่วนใหญ่โปรแกรมประเภทนี้เพื่อให้จัดการง่าย จึงมักจะแยกฟอร์มการเพิ่มชื่อลูกค้าไว้อีกฟอร์มเสมอ เมื่อจะกรอกข้อมูล cust order แล้วไม่เคยมีลูกค้าคนนี้ในฐานข้อมูล ก็ให้ไปเพิ่มชื่อก่อน ในอีกฟอร์ม
แต่ถ้าต้องการให้จัดการในฟอร์มเดียว ก็ทำได้แต่เขียนโค้ดเยอะหน่อย เพราะงานมีหลายงาน
- ทำงานเพิ่มรายละเอียด order
- ตรวจสอบความมีอยู่ของลูกค้า
- เพิ่มลูกค้า
       - รหัสลูกค้าใหม่คนนี้ จะหาจากไหนหายังไง ("ถ้าเป็นชื่อลูกค้าใหม่ ก็อยากให้มันไปเพิ่มข้อมูลใน table1 โดยให้เพิ่มรหัสต่อท้าย ") ต่อท้ายยังไง เป็น Autonumber หรือเป็น string มีหลักการรันอย่างไร
       - ชื่อลูกค้าคนใหม่คนนี้ (น่าจะเป็นที่เพิ่งคีย์เข้ามาในช่องนี้)
       - ที่อยู่ลูกค้าคนใหม่คนนี้ล่ะ จะใส่พร้อมเลยมั้ย หรือปล่อยให้ว่างไว้ก่อน
- ทำงานเพิ่มรายละเอียด order ต่อ

สรุปคือ ขอให้คุณเพิ่มเติมมาอีกหน่อยตามที่ถามไป ว่าจะทำอย่างไร เพราะมีหลายวิธีที่ทำได้ครับ
ก่อนจะจบความเห็น ขอให้คำสั่งนิดหน่อยเผื่อว่าจะร้องอ๋อ แล้วเอาไปดัดแปลงได้เอง

การตรวจสอบการมีอยู่ของลูกค้า
if not isnull(Dlookup("CustName", "table1")) then
การเพิ่มข้อมูลเข้า table1
docmd.setwarnings false
docmd.runsql "INSERT INTO table1 VALUES('c0001', '" & text1 & "', '')"
docmd.setwarnings true
2 @R00157
ขอบคุณ อ.yeadram ที่ตอบ ประดุจเสียงสวรรค์
1. การแยกฟอร์มการเพิ่มชื่อลูกค้าไว้อีกฟอร์มเสมอ เมื่อจะกรอกข้อมูล cust order แล้วไม่เคยมีลูกค้าคนนี้ในฐานข้อมูล
ก็ให้ไปเพิ่มชื่อก่อนในอีกฟอร์ม
     - เนื่องจาก กลัวเสียเวลานะครับ คืออยากให้มันเช็คกับตัวชื่อเลยว่ามีอยู่หรือเปล่า ถ้ามีก็ให้เก็บ custid เก่าใน table2
       ไปเล?? ถ้าไม่มีก็ให้มันไปเพิ่มใน table1 โดยเพิ่มรหัส และ name ในตัวฟอร์ม รหัสจะเป็น Integer ผมใช้เป็น movelast แล้ว +1
       ส่วน name ผมใช้เป็น unbound textbox

2. ใน subform (table2) เป็น continueus form มีหลาย order และจะทำให้มี ลูกค้าหลายคน อยู่ในนั้นด้วยครับ ถ้ามัวเปิดฟอร์มใหม่กรอข้อมูล
     ลูกค้าใหม่จะเสียเวลา ผมจะทำไงถึงจะเช็คจุดนี้ได้ครับ

ขอบคุณมากครับ
3 @R00158
ใน subform ถ้าบอกว่า ช่อง ชื่อ เป็น unbound textbox แสดงว่า ต้องมีอีกคอนโทรลหนึ่ง
เก็บ custID ใช่หรือเปล่าครับ หรือไม่มี
เอาเป็นว่า ผมสมมติเองเลย นะครับ เฉพาะส่วนที่เกี่ยวกับลูกค้า ใน ฟอร์มย่อย
- เป็น contineous form
- มี source คือ table2
- - tCustID     bound กับ field CustID
- - tCustName เป็น unbound สำหรับเพิ่มชื่อลูกค้า

ให้เขียนโค้ดใน control tCustName ในเหตุการณ์ BeforeUpdate

private sub tCustName_BeforeUpdate(cancel as integer)
if tCustName ="" or isnull(tCustName) then
cancel=true
exit sub
end if
if isnull(Dlookup("CustName", "table1", "[CustName] ='" & tCustName & "')) then
dim newID as integer
newID = cint(Dmax("CustID","table1"))+1
docmd.setwarnings false
docmd.runsql "INSERT INTO table1 VALUES(" & newID & ", '" & tCustName & "', '')"
' เครื่องหมายกลุ่มหลังสุด (กลัวงง) อ่านดังนี้นะครับ แอนด์-ดับเบิ้ล-ซิงเกิ้ล-คอมม่า-เคาะ-single-single-วงเล็บปิด-ดับเบิ้ล (อิอิ คำอ่านมั่วดีจัง)
docmd.setwarnings true
tCustID =newID
'else
' การทำงานปกติ เช่น
' tCustID =cint(Dlookup("CustID", "table1", "[CustName] ='" & tCustName & "'))
end if
end sub
4 @R00161
ขอบคุณมากครับ อ.yeadram

ยังสงสัยตัว tCustName ถ้าเราใส่อีก แถว ชื่อมันจะซ้ำกันอ่ะครับ
5 @R00162
ยังไงก็ขอรบกวนเป็นตัวอย่างที่เป็น mdb เลยได้ไหมครับ
ขอบคุณมากครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3290s