นำข้อมูลจาก 1 ตาราง ไปอีก 2 ตาราง โดยมีเงื่อนไขต่า
กระทู้เก่าบอร์ด อ.Yeadram

 1,459   3
URL.หัวข้อ / URL
นำข้อมูลจาก 1 ตาราง ไปอีก 2 ตาราง โดยมีเงื่อนไขต่า

ผมมี Table อยู่ 3 Table (Table 1 Table 2 Table 3)
Table 1 เก็บข้อมูลขาย ดังนี้
IDmem(รหัสสมาชิก)      CodeID(รหัสสินค้า)
1                             001
1                             002
1                             003
2                             002
2                             003
3                             001
4                             002
Table 2 เก็บข้อมูลรหัสสมาชิก 1 คน 1 เรคคอด ดังนี้
IDmem(รหัสสมาชิก)
1
2
3
4
Table 3 เก็บข้อมูลเฉพาะรหัส 002 ดังนี้
IDmem(รหัสสมาชิก)      CodeID(รหัสสินค้า)
1                             002
2                             002
4                             002
ต้องการเขียนโคตให้เก็บข้อมมูลจาก Table1 ไปเก็บไว้ใน Table2 และ Table3
ผมลองทำดูเป็นดังนี้
Set dbs = CurrentDb
Set rstT1 = dbs.OpenRecordset("Table 1", dbOpenSnapshot)
Set rstT2 = dbs.OpenRecordset("Table 2", dbOpenDynaset)
Set rstT3 = dbs.OpenRecordset("Table 3", dbOpenDynaset)
   Do Until rstT1.EOF   
        rstT2.addNew              
        rstT2!IDmem = rstT1!IDmem
        rstT2.update    
                  rstT3.addNew
                       rstT3!IDmem = rstT12!IDmem
                    rstT3!CodeID = rstT1!CodeID
                      rstT3.update
                    rstQ.MoveNext
    Loop

จากโคตใน Table2 รหัสสมาชิกน่าจะออกมาซ้ำ เพราะยังไม่ได้ใส่เงื่อนไข(ใส่ไม่ถูก)
จากโคตใน Table2 ก็น่าจะออกรหัสสินค้ามาทั้งหมด เพราะยังไม่ได้ใส่เงื่อนไข(ใส่ไม่ถูก)
ฝากอาจารย์ช่วยปรับแก้ หรือมี โคตอื่นที่ดีกว่านี้ครับ ผมเอามาประติดปะต่อกัน แต่ใส่เงื่อไขไม่ถูก

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

1 @R17002
ลองปรับแก้ดูนะครับ
กำหนดให้ rstT1 เป็นข้อมูลจากตาราง Table1 โดยมีเงื่อนไขว่ามีรหัสสินค้าเท่ากับ 002

จะได้ว่า
Dim rstT1 As Recordset
SET rstT1 = CurrentDb.Openrecordset("Select * FROM Table1 WHERE [CodeID] = '002'",dbOpenDynaset)

หากต้องการให้ rstT1 คัดกรองข้อมูลจาก TextBox บนฟอร์มที่เราสร้างขึ้นมา สมมติว่าเป็น TextBox1 จะได้ว่า
Dim rstT1 As Recordset
SET rstT1 = CurrentDB.Openrecordset("Select * From Table1 WHERE [CodeID] = ' & TextBox1 & "'", dbOpenDynaset)

*** โปรดระวังการใช้เครื่องหมาย     '        และ    "

หากต้องการเพิ่มเรคคอร์ดที่อยู่ใน rstT1 ไปยัง rstT2
จะได้ว่า

rstT1.MoveFirst

WHILE Not rstT1.EOF
     WITH rstT2
             .AddNew
             .Fields("ชื่อฟิลด์") = ค่าที่ต้องการ
             .Update
     END WITH
WEND

*** หากต้องการแก้ไขข้อมูลเรคคอร์ดปัจจุบันใน rstT2 ให้เปลี่ยนจาก .AddNew เป็น .Edit

ข้อมูลเพิ่มเติม กด 1 เพื่อรอ อ.สันติสุข น๊า.....
2 @R17003
แก้นิดนึงครับ

WHILE Not rstT1.EOF
     WITH rstT2
             .AddNew
             .Fields("ชื่อฟิลด์") = ค่าที่ต้องการ เช่น rst1.Fields("IDMem).Value
             .Update
     END WITH
     rstT1.MoveNext        เพิ่มบรรทัดนี้
WEND
3 @R17004
ขอบคุณมากครับ เดี๋ยวจะลองทำดูก่อนครับ จากตัวอย่าง
เพิ่งรู้ ว่ามันใส่ เงื่อนไขแบบนี้ได้ ยังงัยเดี๋ยวผมประยุกต์เอาครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2689s