ช่วยทีครับเรื่อง insert ข้อมูล
กระทู้เก่าบอร์ด อ.Yeadram

 1,612   5
URL.หัวข้อ / URL
ช่วยทีครับเรื่อง insert ข้อมูล

ช่วยทีครับเรื่อง Insert ข้อมูลเนื่องจากว่าผมไม่สามารถทำไพมารี่คีย์ ฟิว ID
ของตาราง A ได้โดยเหตุผลบางประการ ทำให้ผม Append (ผนวกข้อมูล) ทำให้มีข้อมูลที่ซ้ำกัน เกิดขึ้นได้ผมจึงเรียนถามดังนี้
1.จะทำอย่างไีรเวลาเมื่อตาราง A มีข้อมูลอยู่แล้วถ้าเราAppend (ผนวกข้อมูล)
หรือ Insert ข้อมูลเพิ่มเข้าไป ไม่ต้องให้ข้อมูลมีอยู่แล้วเพิ่มอีกเอา
เฉพาะข้อมูลที่ยังไม่มีเพิ่มเข้าไปอันที่ซ้ำไปแล้วก็แล้วไป
แต่จะเพิ่มซ้ำไม่ได้ครับ


ตัวอย่างตาราง A
id            name          surname       qty    ad1       ad2       total
1             a                 sa                 1      1           2            3
2             b                 sb                 1       2          2            4
3             c                 sc                  2      5          1            6

ข้อมูลที่ Insert
id            name          surname       qty    ad1       ad2       total
4             c               sa                 1      1           2            3
5            d             sb                 1       2          2            4
3             c                 sc                  2      5          1            6

ผลลัพธ์ที่ต้องการ
ตาราง A
id            name          surname       qty    ad1       ad2       total
1             a                  sa                 1      1           2            3
2             b                   sb               1       2          2            4
3             c                  sc                  2      5          1            6
4             c                  sa                  1      1          2           3
5            d                    sb                  1       2          2            4

ช่วยทีครับเดือดร้อนจริงๆ ขอบคุณทุกคำตอบนะครับ
ปล ย้ำอีกที id   ทำไพมารี่คีย์ไม่ได้


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

1 @R11358
Field ใดบ้างเป็นตัวกำหนดว่า ห้ามซ้ำ
ก็กำหนดให้ field กลุ่ม นั้นเป็น Key เลยครับ

ลองใส่ข้อมูลใน table แล้วใช้ tool "Analyze Table" ของ Access ดูก็ได้ครับ
2 @R11359
ขอบคุณคุณ PichaiTC ที่ช่วยตอบครับปัญหาคือจะกำหนดฟิว id   ตาราง A เป็น Key ไม่ได้ครับข้อมูลก่อนหน้านั้นมีการซ้ำกันไปแล้วโปรแกรมไม่ยอมครับที่ข้างบนคือยกตัวอย่างเฉยๆครับข้อมูลจริงมี ID ซ้ำกันเพียบเลย เลยจะให้ข้อมูลที่จะเพิ่มหลังจากนี้ไม่ต้องซ้ำแล้ว ขอทุกท่านช่วยหาแนวทางให้หน่อยครับ
3 @R11363
ถ้าไม่ลำบากมากนักก็ควรกำหนด id เป็นคีย์หลัก
ก่อนหน้านี้ id ซ้ำกัน โปรแกรมก็ยังสามารถทำงานได้
แล้วถ้าหลังจากนี้ไม่อยากให้ id ซ้ำกัน แล้วจะมีความหมายอะไร

ทำอย่างนี้ดีไหมครับ
   ทำการ re-id ใหม่
   สร้างตารางขึ้นมาใหม่ แล้วนำข้อมูลจากตาราง A ไปเก็บในตารางสำรองก่อน
ขณะเราย้ายข้อมูลไป ก็ทำการ re-id ไปด้วยเลย

PRIVATE SUB Command1_Click()
     DIM rst1 as Recordset
     DIM rst2 as Recordset

     set rst1 = CurrentDB.OpenRecordset("ตารางA",dbOpendynaset)
     set rst2 = CurrentDB.OpenRecordset("ตารางB",dbOpendynaset)
     rst1.Movefirst

WITH rst2
     WHILE not(rst1.EOF)
          .Addnew
          .field("name") = rst1.field("name")
               ...
               ...
          .Update
     WEND
END WITH
     rst1.Close
     rst2.Close
END SUB

จากนั้นค่อยลบตาราง A ออก
แล้วเปลี่ยนชื่อตาราง B เป็น ตาราง A

*** หมายเหตุ
     หากตาราง A มีความสัมพันธ์กับตารางอื่น ๆ และ/หรือ ใช้ตาราง A ในคิวรี่ MS Access อาจขอให้คุณลบ
ความสัมพันธ์ดังกล่าวออกไปก่อน จากนั้นเราค่อยเชื่อมความสัมพันธ์ใหม่

ถ้าคุณมีการใช้ตาราง A ในหลาย ๆ ที่กลัวปัญหาเรื่องการเชื่อมความสัมพันธ์จะเสียไป อาจต้องใช้วิธีการต่อไปนี้

PRIVATE SUB command1_click()
dim i as integer
     dim rst1 as recordset
     dim rst2 as recordset

     set rst1 = currentdb.openrecordset("ตารางA",dbopendynaset)
     set rst2 = rst1.RecordsetClone
     rst1.MoveFirst
     rst2.MoveFirst

'Delete all content in ตาราง A
WITH rst1
     WHILE NOT(rst1.EOF)
           .Edit
           .Delete
           .Update
           rst1.MoveNext
     WEND
END WITH

i = 1
WITH rst1
     WHILE NOT(rst2.EOF)
          .AddNew
          .Field("id") = i
          .Field("name") = rst1.Field("name")
               ...
               ...
          .Update
          i = i +1
     WEND
END WITH
     rst1.close
     rst2.close
END SUB

*** ถ้าตาราง A มีความสัมพันธ์กับตารางอื่น และมีการกำหนด Cadcading Delete/Cadcading Update ข้อมูลในตารางย่อยอาจสูญหายหรือเปลี่ยนแปลงไปด้วย

*** โปรดสำรอง ข้อมูล/ไฟล์ ก่อน เพื่อความมั่นใจว่าข้อมูลของคุณจะไม่สูญหาย
4 @R11364
insert into A(id,name,surname,qty,ad1,ad2,total )
select id,name,surname,qty,ad1,ad2,total from B where not exists (select * from A where A.id = B.id)
5 @R11369
ขอบคุณคุณ U&ME และคุณ สันติสุข ที่ช่วยตอบเพิ่มครับ
ตอนนี้กำลังลองอยู่ครับได้ผลยังไงเดี๋ยวมาแจ้งครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2319s