Query Append ไม่ผ่าน
กระทู้เก่าบอร์ด อ.Yeadram

 6,939   12
URL.หัวข้อ / URL
Query Append ไม่ผ่าน

สวัสดีครับอาจารย์ทุกท่าน

ปัญหาที่เจอครั้งนี้ครับ


ตารางหลักที่ใช้งานกับ Access ตัวนี้เป็น Link Table ที่เก็บอยู่ใน MS SQL Server ครับโดยตัว Access ตัวนี้ถูกวางไว้ที่ไดรฟกลางครับ

การ Append ข้อมูลครั้งนี้ที่เป็นปัญหาเป็นการทำ restore data ครับคือผมจะมีการ Backup ข้อมูลลงใน Table Backup แล้วจะทำการ Copy ตัวเองไว้ในพาธ Backup

จากนั้นเมื่อต้องการ Restore จะเข้าไปในไฟล์ Backup ตามวันที่ต้องการแล้วกด Restore

การ Restore จะทำการลบข้อมูลในตารางหลักที่ใช้งานทุกตารางแล้วจะ Append ข้อมูลจากตาราง Backup กลับไปครับซึ่งที่เป็นปัญหาคือไม่สามารถ Append ข้อมูลเข้าได้(มี2ตารางที่ไม่ได้อีก 5 ตารางเข้าได้ครับ)

มี 2 กรณีครับ
1. กด restore จาก Macro จะไม่ขึ้่นแจ้งเตือนว่า Append ไม่ผ่าน (ผมปิด Setwarnnings ไว้ครับ) ซึ่งถ้าเข้าไปดูในตารางพบว่ามี 2 ตารางไม่มีข้อมูล หลังจากเห็นว่าไม่มีข้อมูลผมไปลองกด Append ที่ Query โดยตรงจะขึ้น error ตามรูปที่แนบไปครับ

2. ปิด Access เปิดใหม่แล้วกด Query Append ตัวนั้นโดยไม่กด Macro สามารถ Append รายการได้ครับ

ป.ล. ก่อนหน้านี้สามารถ Restore ได้โดยไม่มีปัญหานี้เลยครับ(ผมเพิ่งเปลี่ยนเป็น Win7 มาประมาณเดือนกว่า แต่เพิ่งมาเจอครั้งนี้ครับไม่รู้ว่าเกี่ยวกันหรือไม่ครับ)

ป.ล.2 ผมลองหา Key Violation แล้วไม่ค่อยเข้าใจเลยครับว่ามันเกิดเพราะอะไร เข้าใจว่ามีปัญหาเรื่อง PK(อันนี้ก็ไม่ได้ไปปรับเปลี่ยนอะไร) PK ผมใช้เป็น Autonumber (แบบเดียวกันกับอีกตารางที่ Append ได้ครับ)

ขอบคุณมากครับ

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

1 @R18402
รูปที่แสดงไม่ตรงกับที่อัพครับ

เป็นรูปนี้ครับ

2 @R18411
Key Violation ก็อาจเพราะเรคอร์ดที่ Append เข้ามาอ้างอิง PK จากเทเบิลอื่น แต่เทเบิลนั้นไม่มีค่า PK ที่ต้องการ ลำดับการ Append ต้องทำให้ถูกต้องด้วย เช่น เรอคร์ดในเทเบิล A อ้างเรคอร์ดในเทเบิล B   ก็ต้อง Append B ก่อน A นะครับ
3 @R18413
ขอบคุณครับอาจารย์
จะลองไล่หาดูครับ แต่งงเลยครับเพราะก่อนหน้านี้ก็ใช้งานได้ปกติแล้วไม่ได้ไปแกไขตารางเลยครับ

สวัสดีปีใหม่ไทยล่วงหน้านะครับ ขอให้มาความสุข สุขภาพแข็งแรงนะครับ
4 @R18429
ผมเพิ่งได้ดูครับ มีข้อสงสัยถามเพิ่มเติมครับ

มีตาราง A กับ B นะครับ
A คือตารางที่ลิ้งค์เข้ากับ SQL Server เป็นตารางที่ใช้จริง
B เป็นตาราง Backup ครับ

ทั้ง A และ B ใช้ structure เหมือนกันครับโดยมี PK เป็น Autonumber

การ Backup ผมใช้วิธีลบข้อมูลทั้งหมดใน B แล้ว Append A > B จากนั้น Copy ตัวมันเองไปไว้ในพาธที่เก็บ Backup file แล้วจึงลบข้อมูลใน B อีกครั้ืง

การ Restore ก็ไปเปิดไฟล์ที่ Backup ไว้เมื่อกด Restore จะทำการลบข้อมูลใน A แล้ว Append จาก B > A ก็จะเสร็จสิ้นครับ

ตารางที่ Backup ไว้มี 7 ตารางครับซึ่งมันเป็นเพราะกรณีนี้มั้ยครับ คือมี 3 ตารางที่ PK ชื่อเดียวกันคือชื่อ Autonumber (และเป็น Autonumber จริงๆ เนื่องจากลักษณะการใช้งานระบบไม่มี PK)
ทำให้ตารางแรกข้อมูลเข้าได้ปกติแต่ 2 ตารางหลัง Append ไม่ได้ (ที่งงเพิ่มคือทำไมก่อนหน้านี้ Append ได้)

ถ้าเป็นกรณีนี้ผมขอถามสองข้อนะครับ
1. ถ้าเป็นเพราะกรณีที่ชื่อ PK ที่ชื่อ autonumber ซ้ำกันผมแก้โดยปรับชื่อใหม่จะแก้ได้มั้ยครับ(ที่ต้องสอบถามเพราะการแก้ต้องไปแก้ในตารางบน SQL Server ซึ่งผมไปขอคนอื่นฝากไว้ครับ
2. กรณีทำไมระบบถึงมองว่าฟิล autonumber มันเป็น key ของอีกตารางนึงครับทั้งที่ append query ของผมก็ใส่แค่ตารางเดียว(ไม่ได้ Join ตาราง)

วันนี้ผมกลับตจว.ครับคงได้ใช้อินเตอร์เน็ตอีกทีคือหลังสงกรานต์เลยครับ ไม่ได้เข้ามาช่วงนี้ครับ
ขอบคุณครับอาจารย์
5 @R18430
ถ้าตารางที่ restore เข้าไม่ได้   PK ไม่ได้ถูกอ้างอิงโดยตารางอื่น คือไม่มีตารางอื่นๆเก็บค่า PK ในตารางที่มีปัญหาเหล่านี้ ตอน restore ให้ append ทุกฟิลด์ยกเว้น PK ครับ แต่แน่นอนว่า restore เข้าไปแล้ว ค่าของ PK ในตารางจะเปลี่ยนไปเพราะมันเป็น Autonumber

ถ้า PK ถูกอ้างโดยตารางอื่น เราจะไม่ใช้เป็นฟิลด์ Autonumber ครับ เพราะปัญหาที่เราไม่สามารถกำหนดค่าเองได้นี่แหล่ะ (หรือได้ แต่ยุ่งยาก ไม่เหมาะในทางปฏิบัติ)

แต่ปัญหาคือพอคุณบอกว่าเคยทำได้ เลยไม่แน่ใจเหมือนกันว่าจะสาเหตุอะไรกันแน่ คุณลองป้อนเรคอร์ดที่ append ไม่ได้เข้าในเทเบิลด้วยตัวเองดูสิครับ ข้อความที่ฟ้องมันอาจจะมีรายละเอียดมากกว่าว่าไม่ได้ที่ฟิลด์ไหนกันแน่

1. ชื่อฟิลด์แก้ได้ครับ แต่ถ้าคุณมีคิวรี่ที่อ้างฟิลด์นี้ ก็ต้องแก้ไขคิวรี่ด้วยนะครับ
2. รู้ได้ยังไงว่ามันมองเป็นของอีกตาราง มันมีข้อความอะไรบอกหรือครับ

ใครเที่ยวสงกรานต์ก็ขอให้เดินทางระมัดระวัง ค่อยไปดีกว่า ส่วนผม เทศกาลนี้ผมอยู่บ้านเขียนโปรแกรม ดูหนัง ไม่ก็ไปกินข้าวข้างนอก ไม่ได้ไปเที่ยวไหนครับ
6 @R18431
ปล. ต่างเทเบิล แต่ชื่อฟิลด์เหมือนกัน ทำได้ไม่มีปัญหานะครับ
7 @R18432
ขอบคุณครับอาจารย์

เรื่องที่ว่ารู้ได้ยังไงผมเข้าใจไปว่ามันไปจับกับตารางก่อนหน้า จากความเห็นแรกที่อาจารย์แนะนำมาครับเลยเข้าใจว่าเพราะมันไปจับกับก่อนหน้า ขอโทษครับ

เมื่อกี้ผมลอง Copy B > A สามารถทำได้ไม่ error ครับ คือข้อมูลมาหมด

ส่วน query append ผมใช้แบบ * ครับคือกดที่ * อันเดียวเลย
8 @R18433
อ๋อ ถ้าระหว่างเทเบิล เรามีการสร้าง Foreign Key Relationships (ใน SQL Server) ตัวจัดการฐานข้อมูลมันจะต้องเช็คให้เราเองโดยอัตโนมัติครับ เช่น

เทเบิลบิลขาย ก็อาจมีฟิลด์ เลขที่บิล , รหัสลูกค้า , ...
เทเบิลลูกค้า ก็อาจมีฟิลด์ รหัสลูกค้า, ชื่อ, ที่อยู่, ...

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

แล้วทำไมคราวนี้ append ได้แล้ว มีแก้ไขอะไรหรือเปล่าครับ
9 @R18457
1. Copy ไปวางผ่านครับ
2. แต่ใช้ Macro ไม่ผ่าน (ไม่ error เพราะใส่ setwarning = no ไว้ครับ แต่ข้อมูลไม่เข้า)
3. หลังจากกด macro ไม่ผ่านลองกด Append query โดยตรงจะขึ้น error ตามภาพครับ

***4. ถ้าเข้าโปรแกรมมาใหม่โดยไม่กด macro แต่ไปกดที่ append query เลย ผ่านครับคือ append ได้

สรุปคือถ้าไม่ได้ใช้ Macro ทั้ง Copy ไปวางและกดที่ append query โดยตรงสามารถทำได้ครับ

แต่ถ้าใช้ macro จะไม่ผ่านเลย(ติด 2 ตารางที่บอกครับ)

**** Macro มีขั้นตอนคือลบตารางหลักก่อนแล้ว append ตารางที่ backup ไว้เข้ามาครับ(ทั้งหมด7ตารางแต่ไม่ผ่าน 2 ตารางครับ)

ขอบคุณอาจารย์ครับ
10 @R18458
ข้อ 3. และ 4. หมายถึง append เฉพาะเทเบิลที่มีปัญหา 2 เทเบิลนั้นใช่หรือไม่ และลำดับในการ append ก็เหมือนๆกันด้วยใช่หรือไม่ ถ้าใช่ อันนี้ไม่รู้แล้วครับ งง เพราะมันกรณีเดียวกัน ไม่น่าจะมีอะไรที่ให้ผลออกมาไม่เหมือนกัน
11 @R18461
ข้อ3 - 4 ผมลอง append เฉพาะ table ที่มัปัญหาครับไม่ได้ append table อื่นที่เข้าได้ครับ
12 @R18574
ผมหาแก้ได้แล้วครับ

ผมแก้ที่ Query ที่ใช้ Append จากเดิม Append * แก้เป็น Append ทุก Field ยกเว้น Field autonumber ครับ ตอนนี้แก้ได้เลยกลับมาตอบครับเผื่อใครเจอปัญหาแบบเดียวกัน

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