กระทู้เก่าบอร์ด อ.Yeadram
        
           1,770   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 ทำไพมารี่คีย์ไม่ได้
    
    
  ของตาราง 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 
				
        
    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 ข้อมูลในตารางย่อยอาจสูญหายหรือเปลี่ยนแปลงไปด้วย
*** โปรดสำรอง ข้อมูล/ไฟล์ ก่อน เพื่อความมั่นใจว่าข้อมูลของคุณจะไม่สูญหาย
    
  ก่อนหน้านี้ 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)
    
  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 และคุณ สันติสุข ที่ช่วยตอบเพิ่มครับ
ตอนนี้กำลังลองอยู่ครับได้ผลยังไงเดี๋ยวมาแจ้งครับ
    
  ตอนนี้กำลังลองอยู่ครับได้ผลยังไงเดี๋ยวมาแจ้งครับ
      Time: 0.0655s
    
      
		
ก็กำหนดให้ field กลุ่ม นั้นเป็น Key เลยครับ
ลองใส่ข้อมูลใน table แล้วใช้ tool "Analyze Table" ของ Access ดูก็ได้ครับ