บันทึกข้อมูลจากฟอร์มบนหน้าจอ ลงเทเบิล 2 เทเบิล
กระทู้เก่าบอร์ด อ.Yeadram

 2,632   6
URL.หัวข้อ / URL
บันทึกข้อมูลจากฟอร์มบนหน้าจอ ลงเทเบิล 2 เทเบิล

http://thai-access.com/suphap.php?topic_id=2558

ลองดูนะครับ
1. สร้าง Appen Query ขึ้นมา 2 ตัว โดยใน Criteria ให้อ้างอิงชื่อ Field (น่าจะเป็น เลขประจำตัว) ใน Main Form
เช่น [Forms]![ชื่อ Form]![ชื่อ Filed บน Form]
2. สร้างปุ่ม Command Button ขึ้นมา แล้วใส่ Code นี้ลงไป

DoCmd.SetWarnings False
DoCmd.OpenQuery "ชื่อ Query ที่ทำจาก ข้อ 1 ตัวที่หนึ่ง", acViewNormal, acEdit
DoCmd.OpenQuery "ชื่อ Query ที่ทำจาก ข้อ 1 ตัวที่หนึ่ง", acViewNormal, acEdit
DoCmd.SetWarnings False

ลองดูนะครับ
Suchat
ชลบุรี

จากคำถามข้างบน
อยากถามเพิ่มนะครับ ในกรณีที่ Field ไม่ใช่เลขประจำตัว แต่เป็นเลขธรรมดา และในบางครั้งเป็นเลขที่ซ้ำ ๆ กัน เวลาเราAppen ข้อมูลเข้าไป มันจะออกข้อมูลเดิมมาด้วย ทำอย่างไรไม่ให้ออกข้อมูลเดิมกรณีที่มีเลขซ้ำกัน ให้ออกเฉพาะข้อมูลใหม่เลยครับ

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

1 @R05964
ลองศึกษา Query Update เพิ่มเติมครับ
2 @R05975
ใช้ Query Update ไม่ได้ครับ เพราะในกรณีที่ตาราง tabel1 ไม่มีเลขที่ ที่ในตาราง table 2 ก็ไม่สามารถUpdate ได้

ผมอยากทำแบบ Appen Query แต่ให้ Appen เฉพาะข้อมูลใหม่ ข้อมูลเก่ากรณีที่เลขที่ซ้ำ้กันก็ไม่ต้อง Appen เข้าไป

ตามภาพนะครับ ผมป้อนข้อมูล 2:350 man:12 และก็ป้อนเข้าำไป โดยฟิลด์2 บางครั้งอาจมีข้อมูลซ้ำกัน เมื่อเรา Appen เข้าไป ข้อมูลที่เราเคยป้อนแล้วจะเข้ามาด้วย
ไม่ต้องการให้ข้อมูลเก่าเข้าไปให้เข้าเฉพาะข้อมูลนะครัีบ

3 @R05982
ตามอ่านมา ก็ยังงงๆ ตกลงจะ update หรือ append
เอาเป็นว่าขอแนะนำเฉพาะการ append โดยมีเงื่อนไขตามที่กล่าวถึงล่าสุดก็แล้วกันนะครับ

การเพิ่มข้อมูล จาก table2 เข้าไปที่ table1 โดยมีเงื่อนไขว่า ต้องเป็นรายการที่ไม่เคยมีใน table1
มันก็คือการใช้ sql statement แบบ insert into โดยระบุเงื่อนไข
ถ้าเขียนไม่คล่อง ให้ใช้ตัวช่วยครับ ดังนี้

- สร้างคิวรี่อันใหม่ โดยใช้ตัวเลือก "ตัวช่วยสร้างคิวรี่ค้นหาข้อมูลที่ไม่เข้าคู่กัน"
- ตัวช่วยจะพาคุณทำครับ มันจะให้คุณเลือกตาราง 2 ครั้ง ในครั้งแรกให้คุณเลือก table2 (ข้อมูลต้นทาง) ครั้งที่สองให้คุณเลือก table1 (ตารางเป้าหมาย)
- ตัวช่วยจะให้คุณระบุสิ่งที่เกี่ยวเนื่องกันระหว่างสองตารางนี้ ก็ให้คุณเลือกฟิลด์ "เลขที่" ของคุณครับ
- ตัวช่วยจะถามคุณอีกว่า จะให้แสดงผลฟิลด์ใดบ้าง ให้คุณเลือกทั้งหมดเลยครับ
- ทีนี้ก็เซฟคิวรี่ แล้วดูผลครับ คุณก็จะได้ข้อมูลของ table2 ที่ยังไม่เคยมีใน table1

- ต่อไป ให้เปลี่ยนมุมมองของคิวรี่นี้ไปเป็นมุมมองออกแบบ แล้วเลือกคำสั่งจาก เมนูของ Access ให้เปลี่ยนชนิดของคิวรี่ตัวนี้ไปเป็น "แบบสอบถามแบบใช้ผนวกข้อมูล"
- ระบบจะถามคุณว่า จะให้เพิ่มข้อมูลเข้าไปที่ตารางใด คุณก็ระบุให้มันไปครับ ว่าเป็น table1 (ตารางเป้าหมาย)
- ตัวคิวรี่เองจะมีการปรับเปลี่ยนหน้าตาไปนิดหน่อย นั่นคือเพิ่มบรรทัดมาอีกบรรทัดหนึ่ง ซึ่งจะเป็นการเติมชื่อฟิลด์ของ table1 ลงไปให้โดยอัตโนมัติ
- ให้คุณมองดูที่ฟิลด์สุดท้ายเลยครับ สังเกตุเห็นว่าฟิลด์นี้จะมีคำว่า "IS NULL" อยู่ในบรรทัด "เงื่อนไข" ให้คุณมองขึ้นไปอีกบรรทัดหนึ่ง จะเห็นชื่อฟิลด์ "เลขที่" ให้ลบมันออกครับ
- สั่งรันคิวรี่ได้เลยครับ

หมายเหตุ............. กรณีนี้ต้องมันใจว่า table1 กับ table2 มีจำนวนฟิลด์ มีชื่อฟิลด์ ชนิดของฟิลด์แต่ละฟิลด์ ต้องเหมือนกันทุกประการนะครับ ถึงจะได้ผล
4 @R05984
ขอบคุณมากครับ
5 @R05985
คือตามที่คุณ yeadram แนะนำใช้ได้แล้วครับ แต่จริง ๆ แล้วที่ต้องการคือว่า
มีกรณีที่เลขที่ซ้ำกันไม่สามารถ append เข้าไปได้
คืออยากเขียนให้ในกรณีที่ มีเลขซ้าก็สามารถ append เข้าไปได้ด้วย
โดยไม่ต้องนำข้อมูลที่เราเคย append นั้นเข้าไปอีก เพราะมันจะไปซ้ำกัน


ต้องขอโทษด้วยครับผมอาจจะถามคำถามอ่านแล้วไม่เข้าใจ
6 @R05995
เปิดตาราง table1 ในมุมมองออกแบบ สำรวจดูว่า
-มีฟิลด์ Primary หรือไม่ ++ ให้ลดสิทธ์มันลงมาเท่ากับฟิลด์อื่นๆ
-มีฟิลด์ใดๆ ทำหน้าที่เป็น ดัชนี ที่ห้ามข้อมูลซ้ำหรือไม่ ++ ให้ลดสิทธิ์หรือข้อจำกัดเหล่านั้นออก เพื่อให้เท่ากับฟิลด์อื่นๆ
-ถ้าตารางนี้ (table1) มีความสัมพ์นธ์กับตารางอื่นๆ แบบ one-to-many โดยตัวของมันอยู่ในฝั่ง one ++ให้เอาความสัมพันธ์ออก

ทีนี้คุณ append ด้วยวิธีของคุณได้เลย มันจะไม่ฟ้อง ไม่ขวางคุณอีกแล้ว แม้จะมีข้อมูลซ้ำก็ตาม

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