ดึงข้อมูลจาอีกตารางมาอีกตารางลิ้งค์โดยรหัสทำยังไงครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

14 ก.ย. 64 , 08:23:28
อ่าน 102 ครั้ง

001Jetnipit



ต้องการเอาข้อมูลฟิลด์ชนิดจากตารางชนิด เข้าฟิลด์ชนิดในตตารางหลัก ลิงค์กันโดยฟิลด์รหัส ไม่ทราบว่าตองทำวิธีไหนครับ ผมพอทราบว่าทำได้แต่ทำไม่เป็นครับผม เป็นมือใหม่ครับ ขอบคุณครับ
« แก้ไขครั้งสุดท้าย: 14 ก.ย. 64 , 10:07:01 โดย 001Jetnipit »

 

14 ก.ย. 64 , 09:25:07
ตอบกลับ #1

PNR

ใช้ Update Query ได้ครับ

เช่น
โค๊ด: [Select]
UPDATE TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส] SET [TBLข้อมูลหลัก].[ชนิด] = [TBLชนิด]![ชนิด];
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

14 ก.ย. 64 , 10:27:13
ตอบกลับ #2

001Jetnipit



ใส่ไว้ข้างล่างแบบนี้หรือเปล่าครับ

 

14 ก.ย. 64 , 10:40:46
ตอบกลับ #3

PNR

จากตัวอย่างนั้น มี 2 ตาราง
การที่จะแสดงข้อมูลได้นั้นสามารถทำได้ 2 แบบ คือ
1. ใช้คิวรี่ในการแสดงผล (แบบนี้ใช้การ Dlookup ก็ได้ครับ) ถ้าอยากได้แบบใช้คิวรี่แสดงผล เดี่ยวทำให้ดู

2.คือให้อัพเดทข้อมูล ชนิด  ในตารางข้อมูลหลัก
โค๊ด sql ที่ให้ไปนั้นจะต้องสร้าง query ใหม่ขึ้นมาใช้งาน จะใช้สำหรับอัพเดทข้อมูลให้ตารางข้อมูลหลักก่อนการแสดงผลครับ
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

14 ก.ย. 64 , 10:51:32
ตอบกลับ #4

001Jetnipit

จากตัวอย่างนั้น มี 2 ตาราง
การที่จะแสดงข้อมูลได้นั้นสามารถทำได้ 2 แบบ คือ
1. ใช้คิวรี่ในการแสดงผล (แบบนี้ใช้การ Dlookup ก็ได้ครับ) ถ้าอยากได้แบบใช้คิวรี่แสดงผล เดี่ยวทำให้ดู

2.คือให้อัพเดทข้อมูล ชนิด  ในตารางข้อมูลหลัก
โค๊ด sql ที่ให้ไปนั้นจะต้องสร้าง query ใหม่ขึ้นมาใช้งาน จะใช้สำหรับอัพเดทข้อมูลให้ตารางข้อมูลหลักก่อนการแสดงผลครับ

งั้นของผมควรใช้วิธีแรกใช่ไหมครับ

 

14 ก.ย. 64 , 10:56:01
ตอบกลับ #5

PNR

งั้นของผมควรใช้วิธีแรกใช่ไหมครับ

แล้วแต่การใช้งานครับ ลองสร้าง คิวรี่ใหม่แล้วเอา SQL นี้ไปวางแล้วรันดูครับ

โค๊ด: [Select]
SELECT DLookUp("ชนิด","TBLชนิด","รหัส = '" & [รหัส] & "'") AS ชนิด, [TBLข้อมูลหลัก].*
FROM TBLข้อมูลหลัก;
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

14 ก.ย. 64 , 11:15:55
ตอบกลับ #6

001Jetnipit

งั้นของผมควรใช้วิธีแรกใช่ไหมครับ

แล้วแต่การใช้งานครับ ลองสร้าง คิวรี่ใหม่แล้วเอา SQL นี้ไปวางแล้วรันดูครับ

โค๊ด: [Select]
SELECT DLookUp("ชนิด","TBLชนิด","รหัส = '" & [รหัส] & "'") AS ชนิด, [TBLข้อมูลหลัก].*
FROM TBLข้อมูลหลัก;



ไม่มาครับผม

แต่อันนี้มาครับ
โค๊ด: [Select]
UPDATE TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส] SET [TBLข้อมูลหลัก].[ชนิด] = [TBLชนิด]![ชนิด];


ผมลอกลากฟิลด์ชื่อ รหัสต่างๆ ลงมาแต่มันไม่แสดงครับ แสดงแต่ฟิลด์ในรูปฟิลด์เดียวเลย
« แก้ไขครั้งสุดท้าย: 14 ก.ย. 64 , 11:52:48 โดย 001Jetnipit »

 

14 ก.ย. 64 , 12:51:03
ตอบกลับ #7

OddyWriter

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

คำถามคือสาเหตุที่ต้องการฐานข้อมูลแบบในข้อความแรกคืออะไร
ทั้งนี้เพราะในระบบฐานข้อมูลนั้นควรจะเก็บข้อมูล Non Key แบบเชิงเดี่ยว

เพราะถ้ามีข้อมูลชุดเดียวกันอยู่ใน 2 ตาราง มันจะทำให้เกิดความสับสนเมื่อใช้งานไปนานๆ ได้

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

ทั้งนี้ยกเว้นคุณมีจุดประสงค์อื่น เช่นต้องการบันทึกการเปลี่ยนแปลงชนิด แบบนี้ก็ต้องสร้างตารางบันทึกการเปลี่ยนแปลงชนิด ซึ่งก็ต้องมีฟิลด์วัน-เวลา เพื่อเก็บข้อมูลด้วย
วิกฤติโควิดทำให้ร้อนเงิน
ใครอยากจ้างทำฐานข้อมูล สอนวางระบบฐานข้อมูล Excel/ Access/ VBA Excel/ VBA Access/ SQL Server/ Database Design
แม้กระทั่งดูดวง ก็ติดต่อได้นะครับ
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

14 ก.ย. 64 , 13:42:09
ตอบกลับ #8

PNR

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

คำถามคือสาเหตุที่ต้องการฐานข้อมูลแบบในข้อความแรกคืออะไร
ทั้งนี้เพราะในระบบฐานข้อมูลนั้นควรจะเก็บข้อมูล Non Key แบบเชิงเดี่ยว

เพราะถ้ามีข้อมูลชุดเดียวกันอยู่ใน 2 ตาราง มันจะทำให้เกิดความสับสนเมื่อใช้งานไปนานๆ ได้

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

ทั้งนี้ยกเว้นคุณมีจุดประสงค์อื่น เช่นต้องการบันทึกการเปลี่ยนแปลงชนิด แบบนี้ก็ต้องสร้างตารางบันทึกการเปลี่ยนแปลงชนิด ซึ่งก็ต้องมีฟิลด์วัน-เวลา เพื่อเก็บข้อมูลด้วย
ผมได้รีโมทไปทำแบบนั้นให้เขาแล้วครับอาจารย์
โดยใช้คิวรี่ในการเชื่อมข้อมูลมาแสดงครับ
1.ตอนแรกไม่ค่อยเข้าใจโจทย์เมื่อได้เห็นการออกแบบก็ทำให้แล้วเป็น ถ้าแสดงข้อมูลธรรมดา
โค๊ด: [Select]
SELECT [TBLข้อมูลหลัก].[รหัส], [TBLข้อมูลหลัก].[ชื่อ], [TBLชนิด].[ชนิด]
FROM TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส];


« แก้ไขครั้งสุดท้าย: 14 ก.ย. 64 , 13:47:47 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

14 ก.ย. 64 , 13:47:46
ตอบกลับ #9

001Jetnipit

ขอบคุณครับผม
ใช้วิธีสร้าง Qryupdate (เอาไว้อัปเดตข้อมูลจากตารางชนิดที่ลิงค์มาจาก Excel เมื่อมีการเปลี่ยนแปลงข้อมูลภายในไปสู่ TblShowdata)
โค๊ด: [Select]
UPDATE TblType INNER JOIN TblMain ON TblType.[CodeV] = TblMain.[Code] SET TblMain.Type1 = [TblType]![TypeV1], TblMain.Type2 = [TblType]![TypeV2];

แล้วส้รางQryShowdata (ไว้แสดงค่าเมื่อกดอัปเดตจาก QryUpdate)
โค๊ด: [Select]
SELECT TblMain.Code, TblMain.Name, DLookUp("TypeV1","tbltype","CodeV = '" & [Code] & "'") AS Type1, DLookUp("TypeV2","tbltype","CodeV = '" & [Code] & "'") AS Type2
FROM TblMain;

ปล.ตารางหลักชื่อว่า tblmain มีฟิลด์ [Type1] [Type2]
ปล.ตารางชนิดชื่อว่า tbltype มีฟิลด์ [TypeV1] [TypeV2]

 

14 ก.ย. 64 , 13:53:24
ตอบกลับ #10

PNR

ที่ท่านต้องการคืออัพเดท ฟิลล์ [Type1] [Type2] ของตาราง Main ที่นำเข้ามาจาก Excel โดยอ้างอิงจาก รหัส ใช่ไหมครับ

SELECT TblMain.Code, TblMain.Name, DLookUp("TypeV1","tbltype","CodeV = '" & Code & "'") AS Type1, DLookUp("TypeV2","tbltype","CodeV = '" & Code & "'") AS Type2
FROM TblMain;

โค๊ดนี้ ไว้สำหรับดูข้อมูลก่อนอัพเดทนะครับ เอาไว้ตรวจเช็คหรือแสดงข้อมูลก่อนอัพเดท
โดยใช้ Dlookup มาแสดง โดยอ้างอิงจากรหัส

หรือจะใช้การสร้างการเชื่อมความสัมพันธ์ ฟิลล์ รหัส แล้วดึงข้อมูลมาแสดงก็ได้ครับ
« แก้ไขครั้งสุดท้าย: 14 ก.ย. 64 , 14:11:15 โดย PNR »
Time to stop for me  :dizzy:
 

14 ก.ย. 64 , 14:08:58
ตอบกลับ #11

001Jetnipit

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

คำถามคือสาเหตุที่ต้องการฐานข้อมูลแบบในข้อความแรกคืออะไร
ทั้งนี้เพราะในระบบฐานข้อมูลนั้นควรจะเก็บข้อมูล Non Key แบบเชิงเดี่ยว

เพราะถ้ามีข้อมูลชุดเดียวกันอยู่ใน 2 ตาราง มันจะทำให้เกิดความสับสนเมื่อใช้งานไปนานๆ ได้

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

ทั้งนี้ยกเว้นคุณมีจุดประสงค์อื่น เช่นต้องการบันทึกการเปลี่ยนแปลงชนิด แบบนี้ก็ต้องสร้างตารางบันทึกการเปลี่ยนแปลงชนิด ซึ่งก็ต้องมีฟิลด์วัน-เวลา เพื่อเก็บข้อมูลด้วย
ผมได้รีโมทไปทำแบบนั้นให้เขาแล้วครับอาจารย์
โดยใช้คิวรี่ในการเชื่อมข้อมูลมาแสดงครับ
1.ตอนแรกไม่ค่อยเข้าใจโจทย์เมื่อได้เห็นการออกแบบก็ทำให้แล้วเป็น ถ้าแสดงข้อมูลธรรมดา
โค๊ด: [Select]
SELECT [TBLข้อมูลหลัก].[รหัส], [TBLข้อมูลหลัก].[ชื่อ], [TBLชนิด].[ชนิด]
FROM TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส];

อ๋อครับผม ขอบคุณอาจารย์ทั้งสองท่านมากเลยครับ :smile: :smile: :smile:

 

14 ก.ย. 64 , 14:13:57
ตอบกลับ #12

OddyWriter

ผมก็ยังงงอยู่ดีว่า ทำไปเพื่ออะไร กับการใส่ Non Key ไว้ 2 ตาราง แบบนี้
วิกฤติโควิดทำให้ร้อนเงิน
ใครอยากจ้างทำฐานข้อมูล สอนวางระบบฐานข้อมูล Excel/ Access/ VBA Excel/ VBA Access/ SQL Server/ Database Design
แม้กระทั่งดูดวง ก็ติดต่อได้นะครับ
 

14 ก.ย. 64 , 14:20:40
ตอบกลับ #13

001Jetnipit

ผมได้สร้าง Primary Key ไว้แล้วที่ฟิลด์ รหัส ครับป้องกันการซ้ำซ้อนของข้อมูลครับ
« แก้ไขครั้งสุดท้าย: 14 ก.ย. 64 , 14:26:46 โดย 001Jetnipit »

 

14 ก.ย. 64 , 15:08:26
ตอบกลับ #14

001Jetnipit

ขอสอบถามครับ พอผมประยุกต์วิธีที่อาจารย์ PNR มาใช้กับ Form หลัก มันขึ้น Error แบบนี้ครับ ไม่ทราบว่าผมทำอะไรผิดหรือเปล่าครับ พยายามเช็ดดีแล้วครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย