อยากให้ค่าจากtableที่ส่งไปในqueryเพื่อคำนวณ แต่เมื
กระทู้เก่าบอร์ด อ.Yeadram

 4,800   30
URL.หัวข้อ / URL
อยากให้ค่าจากtableที่ส่งไปในqueryเพื่อคำนวณ แต่เมื

ค่าจากtableออก ซึ่งในqueryก็ยังคิดค่านั้นอยู่

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

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

ปล.คือไม่อยากให้ในตารางtb_1มีข้อมูลเยอะเกินไป

มีตารางtb_1 คือ
Product    จำนวนที่ยืม
คะน้า               2
ผักกาด            3
ผักชี               4

มีquery1 คือ
Product     จำนวนที่มี       จำนวนที่ยืม        จำนวนที่เหลือ
คะน้า              10                      2                          8
ผักกาด           10                      3                          7
ผักชี               10                      4                          6

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

1 @R21246
ผมเห็นโจทย์นี้หลายวันแล้ว แต่งงๆ กับความต้องการอยู่ ก็เลยยังไม่ตอบอะไร
เพราะมันตะหงิดๆ อยู่ว่า ถ้าทำอย่างที่คุณระบุเอาไว้ อาจสร้างปัญหาให้กับฐานข้อมูลได้ในอนาคต ดังนั้นรบกวนคุณตอบปัญหาเป็นข้อๆ ดังนี้นะครับ

1. ปกติในการทำเรื่องยืมนั้นจะมีอยู่ 2 ระบบ คือ ยืมแล้วคืนด้วยของชิ้นเดิม เช่นห้องสมุด หรือยืมแล้วคืนด้วยของคนละชิ้น เช่นอาหาร ฐานข้อมูลของคุณเป็นแบบไหน?
2. tb_1 ที่คุญบอกว่าเป็นประวัติการยืม ซึ่งมันควรจะเก็บข้อมูลว่า ยืมอะไร จำนวนเท่าไหร่ ยืมไปเมื่อวันไหน (ไม่มีวันที่ ก็ไม่มีประวัติ) ซึ่งมันหลีกไม่พ้นที่จะต้องเก็บข้อมูลเพิ่มไปเรื่อยๆ ตรงนี้เองที่ไม่มีทางเป็นไปได้ คุณยังยืนยันจะให้เป็นแบบเดิมของคุณหรือไม่?
3. ถ้ามองอีกมุมว่า tb_1 เป็นรายการสินค้าคงคลังหรือของในสโตร์ แบบนี้ถึงจะตอบโจทย์ของคุณได้ แต่ก็หลีกไม่พ้นที่จะต้องมี tb_2 ที่ต้องเก็บข้อมูลการยืมอยู่ดี ซึ่งการทำแบบนี้ คุณสามารถใช้ update query ไปตัดข้อมูลจาก tb_1 ที่หมายถึงสินค้าคงคลังได้ไม่ยาก ถ้าคุณคิดว่าข้อนี้คือสิ่งที่ใช่ อาจต้องมีการปรับเปลี่ยนโครงสร้างฐานข้อมูล จะเอาไหม?
2 @R21252
ตอบ
ข้อ1: เป็นการยืมแบบนำไปใช้เลย ขอถามเรื่องระบบยืมแล้วคืนด้วยของคนละชิ้น เช่นอาหารมันคืออะไร

ข้อ2: ใช่ในtb_1 เป็นประวัติการยืม โดยมีว่า ยืมอะไร จำนวนเท่าไร วันที่ยืมและเวลาที่ยืม ซึ่งถ้าเป็นอย่างที่คุณบอกคือ มันต้องเก็บข้อมูลเพิ่มไปเรื่อยๆ แล้วจะรู้ได้อย่างไรว่า มันเก็บได้มากแค่ไหน
ปล.เหตุผลก็คือไม่อยากให้เก็บข้อมูลเยอะ ซึ่งไม่งั้นผ่านไป5ปี ข้อมูลมันก็ยังอยู่
เลยคิดว่า ถ้าฝังข้อมูลไว้ในqueryได้ ก็น่าจะลบประวัติการยืมไปได้
สิ่งถ้าเป็นอย่างที่คุณบอกคือ มันต้องเก็บไปเรื่อยๆ อยากทราบเหตุผล

ข้อ3: ได้สร้างtb_add ไว้เพื่อให้คนมากรอกจำนวนที่มีไว้ , มีtb_1ไว้เป็นประวัติการยืม และมีqueryที่มีทั้ง จำนวนที่มี จำนวนที่ยืม และจำนวนที่เหลือ
ซึ่งต่างจากสิ่งที่คุณพูดหรือไม่




3 @R21253
1. การยืมแล้วนำไปใช้เลยนี่อย่างไรครับ ใช้แล้วคืน หรือไม่คืน (งง)

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

3. (ตอบข้อ 2 ครับ) ตารางมีหน้าที่เก็บข้อมูล คิวรีไม่สามารถเก็บข้อมูลอะไรได้ มีหน้าที่ในการดึงข้อมูลจากตารางมาใช้งานเท่านั้น ดังนั้นถ้าคิดจะฝังข้อมูลเอาไว้ในคิวรี เลิกคิดได้เลย ถ้าสมมติว่าคุณไม่ต้องการเก็บข้อมูลเยอะๆ เมื่อถึงเวลานึง ก็ทำการล้างข้อมูลในตารางได้ เช่นเราเก็บข้อมูลตั้งแต่ปี 2000 มาถึงปัจจุบัน ถ้าฉันอยากลบข้อมูลก็สร้างคิวรีลบข้อมูลปี 2000 ออกไป ข้อมูลก็ลดลงแล้ว
ส่วนจะรู้ได้อย่างไรว่าเก็บข้อมูลได้มากแต่ไหน มันก็ขึ้นอยู่กับคอมพิวเตอร์และ Access ที่คุณใช้เก็บข้อมูลครับ ตัว Access เอง มันสามารถจัดการข้อมูลได้เยอะนะ เยอะกว่า Excel หลายเท่านัก

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

จนถึงตอนนี้ ผมก็ยังไม่รู้รูปแบบการยืมของคุณเลย ดังนั้นก็ยังตอบอะไรไม่ได้มากอยู่ดี

แต่ถ้าเป็นผมนะ

ผมจะดูเลยว่ายืมอะไร ยืมแบบไหน

ถ้ายืมแล้วคืนด้วยของชิ้นเดิม เช่นยืมเครื่องช่างหรือหนังสือ ของทุกชิ้นก็มี Item เป็นของตัวเอง เก็บประวัติการยืมไว้อย่างละเอียดยิบ

ถ้ายืมแล้วคืนด้วยของอีกชิ้น ก็จะใช้ระบบคลังสินค้า แต่ละกลุ่มสินค้า (ผัก น้ำปลา ข้าวสาร ฯลฯ) ก็จะมี Item ของกลุ่มตัวเอง ยืมผักไป 30 โล ก็ตัดจำหน่ายออกไป คืนผักก็ทำรับสินค้าเท่านั้นเอง แล้วก็ใช้คิวรีในการรวมจำนวนสินค้าทั้งหมด (แน่นอนต้องมีระบบเช็คสต็อกกับ FIFO เข้ามาสนับสนุนด้วย)
4 @R21259
1.แบบไม่คืน
2.ขอบคุณ
3.ซึ่งถ้าลบข้อมูลในตารางออก ค่าคงเหลือจะไม่เหมือนเดิม

-การยืมเป็นแบบนำไปใช้งานเลย แบบไม่คืน
ซึ่งฐานข้อมูลเป็นแบบที่ทำเป็นดังนี้
-1.คำนวณจำนวนที่ต้องซื้อ(query)>>ต้องมีจำนวนที่เหลือในข้อ4.มาเกี่ยวด้วย
-2.ทำการกรอกข้อมูลจำนวนที่มี(table)>>ต้องเอาจำนวนที่เหลือ+จำนวนที่ต้องซื้อ
-3.ประวัติการยืม(table)
-4.ยอดจำนวนที่เหลือ(query)>>ผูกสูตรไว้คือเอาจำนวนที่มี-จำนวนที่ยืม

โดยมันต้องวนลูปไปเรื่อยๆตั้งแต่ข้อ1.-ข้อ4.
ซึ่งถ้าลบประวัติการยืมข้อ3.ออก มันจะทำให้ยอดจำนวนที่เหลือไม่เหมือนเดิม(เหมือนทืเหมือนข้อ3.ข้างต้น)

โดยสิ่งที่ต้องการคือ ถ้าลบลบประวัติการยืมข้อ3.ออก ต้องทำให้ยอดจำนวนที่เหลือเหมือนเดิม คุณพอมีวิธีที่จะทำให้เป็นแบบนี้หรือป่าว
5 @R21260
สรุปนะครับ

แบบนี้ไม่เรียกการยืมนะครับ มันคือการเบิกจ่าย เหมือนการตัดสต็อกพวกน๊อต ตะปูอะไรแบบนั้น

ถ้าอย่างนั้นขอแนะนำให้คุณใช้วิธีการดังนี้นะครับ

1. ตารางเก็บสต็อกคงคลัง (tblStock) ซึ่งจะเก็บข้อมูลว่า ณ จุดเริ่มต้นมีของอยู่เท่าไหร่
2. สร้างฟอร์มเพื่อป้อนข้อมูลการเบิกจ่าย ว่าจะเบิกอะไรไปจำนวนเท่าไหร่
3. เมื่อป้อนข้อมูลเสร็จในแต่ละรายการของที่เบิกจ่าย ก็ไปทำการตัดยอดสต็อกคงเหลือของสิ่งที่เบิกจ่ายให้เท่ายอดที่เบิกออกไป เช่น เดิมในตารางอาจมี Item A อยู่ 100 หน่วย เมื่อทำการเบิกไป 10 หน่วย ก็ทำการตัดสต็อกออกไป 10 หน่วย ก็จะเหลือข้อมูลอยู่ในตาราง 90 หน่วยเป็นต้น
4. เพื่อความปลอดภัย คุณก็ควรมีอีกตารางอีกตารางเพื่อเก็บบันทึกข้อมูลการเบิกจ่าย เพื่อจะสามารถตรวจสอบการเบิกจ่ายย้อนหลังได้
5. ถ้านี่ใช่สิ่งที่คุณต้องการ ก็บอกมานะครับ ผมจะได้เข้าใจซักที
5. สุดท้าย ถ้าลงท้ายด้วย "ครับ" บ้าง ก็จะทำให้เนื้อหาดูไม่ห้วนดีนะครับ
6 @R21261
ตอบนะครับ
สิ่งที่คุณบอกคือ ใช่เลยครับ

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

แต่ข้อ4.ของคุณ ที่บอกว่า ควรมีอีกตารางอีกตารางเพื่อเก็บบันทึกข้อมูลการเบิกจ่าย
เพื่อจะสามารถตรวจสอบการเบิกจ่ายย้อนหลังได้
ใช่ต้องมีตารางประวัติการเบิกจ่าย2ตารางหรือป่าวครับ
7 @R21263
มี 2 ตารางที่ต่างกันครับ
ตาราง 1 เป็นตาราง เก็บข้อมูลสต็อกคงเหลือ ที่จำนวนเรคอร์ดจะไม่ค่อยเปลี่ยนแปลงเท่าไหร่ (จะเปลี่ยนในกรณีที่มีการยกเลิกหรือเพิ่มชนิดของการสต็อก) สิ่งที่เปลี่ยนคือตัวเลขจำนวนสต็อกที่เพิ่มหรือลดตาม transaction ที่เกิดขึ้น ซึ่งตัวเลขนี้จะเป็นจำนวนคงเหลือล่าสุด
แบบนี้ใช่สิ่งที่คุณต้องการหรือเปล่าครับ ถ้าใช่ก็ง่ายนิดเดียว เพียงสร้าง updated query ง่ายๆ ก็ได้แล้วครับ

ตาราง 2 เป็นตารางเก็บ transaction ต่างๆ ที่เกิดขึ้น เช่นมีการเพิ่มของในสต็อกหรือการตัดของในสต็อกออกไป ซึ่งตารางนี้จะมีข้อมูลเพิ่มขึ้นเรื่อยๆ ตามจำนวน transaction ที่ทำ
8 @R21264
เข้าใจอย่างนี้ถูกต้องหรือป่าวครับ
1.เป็นตารางที่มีข้อมูลItemที่มีทั้งหมดและจำนวนที่เหลือ(จะเปลี่ยนในกรณีที่มีการยกเลิกหรือเพิ่มชนิดของItem)
ซึ่งจำนวนที่เหลือ จะมีมากหรือน้อยก็จะตามtransaction ที่เกิดขึ้น


คำถามจากข้อ1.
-ถ้าตารางนี้ เป็นตาราง เก็บข้อมูลสต็อกคงเหลือ ดังนั้นต้องมีการสร้างสูตรขึ้น
โดยเอาจำนวนที่มี - จำนวนที่เบิก โดยจำนวนที่เบิกเอามาจากตารางเก็บประวัติการเบิกจ่าย ดังนั้นมันต้องทำเป็นqueryขึ้นมาน่ะสิครับ

-แล้วที่บอกว่าตัวเลขนี้จะเป็นจำนวนที่เหลือล่าสุด ซึ่งถ้าลบประวัติการเบิกจ่ายไป
จำนวนที่เหลือจะเป็นล่าสุดยังไง หรือเพียงสร้าง updated query อย่างที่คุณบอกครับ

-ถ้าแค่สร้างupdated query จะทำให้เป็นจำนวนที่เหลือล่าสุดกับลบประวัติการเบิกจ่ายได้ ก็จะเป็นสิ่งที่ต้องการครับ

2.เป็นตารางเก็บประวัติการเบิกจ่ายว่า เบิกอะไร เบิกไปเท่าไร ซึ่งตารางนี้จะมีข้อมูลเพิ่มขึ้นเรื่อยๆ ตามจำนวน transaction ที่ทำใช่หรือป่าวครับ
9 @R21265
หรือตาราง2ที่คุณบอก เป็นตารางที่มีข้อมูล Itemว่ามีอะไรบ้างและมีจำนวนเท่าไรในสต็อกครับ
10 @R21266
ตารางที่ 1
สมมติว่าชื่อ tblStock
จะมีฟิลด์ ProductID, ProductDesc, ProductStock, ProductUnit (ใช้เก็บหน่วย เป็น kg เป็น Pcs ก็ว่ากันไป)

ตารางที่ 2
สมมติว่าชื่อ tblTransaction
จะมีฟิลด์ ProductID, TramsactionAmount, TransactionDate, TransactionBy (คือใครเป็นคนเบิก)

ทีนี้ก็มีฟอร์ม 1 ฟอร์ม ใช้สำหรับป้อนข้อมูลการเบิก
เมื่อจบ Transaction บนฟอร์มนี้สิ่งที่เกิดขึ้นคือ
1. ข้อมูล Transaction จะถูกเพิ่มเข้าไปในตาราง tblTransaction ทำให้ข้อมูลในตารางนี้เพิ่มขึ้นเรื่อยๆ
2. ตัวเลข TransactionAmount จะถูกนำไปหักออกจากยอด ProductStock ใน tblStock โดยใช้ Updated Query จะทำให้ข้อมูลในตารางนี้มีจำนวนเรคอร์ดเท่าเดิม แต่จำนวน Stock เปลี่ยนไป เป็นจำนวนหลังถูกเบิกจ่ายไปแล้ว

พอนานๆ ไป อยากจะทำการลบข้อมูลเก่าๆ ก็ไปลบที่ tblTransaction ส่วน tblStock ไม่ต้องไปยุ่งกับมัน เพราะจำนวนเรคอร์ดไม่ได้เปลี่ยนไป
11 @R21268
โดย
ตารางที่1 ได้เพิ่ม ID กับ วันที่เข้าไป เพราะอยากรู้ว่ามีการaddproductไปกี่Itemและวันไหนซึ่งจะทำการกรอกข้อมูล1ครั้ง/ปี

ตารางที่2 ได้เพิ่ม ID เข้าไปครับ

ซึ่งได้ทำการสร้างฟอร์มในvb
1.โอเคครับ
2.ตัวเลข TransactionAmount จะถูกนำไปหักออกจากยอด ProductStock ใน tblStock ครับ
โดยสร้าง queryขึ้นมา และใช้Updated Query ซึ่งจะได้นจำนวน Stock เปลี่ยนไป เป็นจำนวนหลังถูกเบิกจ่ายไปแล้ว ซึ่งก็คือจำนวนคงเหลือที่ผมต้องการ

แล้วที่คุณบอกว่า พอนานๆ ไป อยากจะทำการลบข้อมูลเก่าๆ ก็ไปลบที่ tblTransaction โอเคครับ
ส่วน tblStock ไม่ต้องไปยุ่งกับมัน เพราะจำนวนเรคอร์ดไม่ได้เปลี่ยนไป
คำถามครับ
1.แต่ tblStock ของผมมัน1ปีกรอกครั้งหนึ่ง แล้วถ้าปีต่อไปมากรอกเพิ่ม ดังนั้นจำนวนเรคอร์ดจะเพิ่มขึ้น และจะให้จำนวนในqueryตรงฟิลด์ProductStockเปลี่ยนไป
ยังนี้แล้ว ในqueryต้องทำอะไรเพิ่มหรือป่าวครับ

2.คุณธัชชัย ช่วยสอนการใช้Updated Query หน่อยครับ
ซึ่งผมได้ลองสร้างquery
2.1โดยเอาtblStock กับ tblTransaction มา
2.2แล้วเชื่อมสัมพันธ์ในฟิลด์ProductIDของทั้งสองตาราง
2.3แล้วสร้างฟิลด์ใหม่ที่ชื่อ จำนวนที่มี โดยเอาProductStockลบกับTramsactionAmount ครับ
2.4แล้วเลือกโหมดปรับปรุง(Update)ไอตรงช่อง ปรับปรุงเป็นควรเขียนอย่างไรครับ

3.ในเรื่องการสร้างความสัมพันธ์ มันสร้างแค่ในqueryก็พอหรือต้องสร้างในหัวข้อออกแบบ(ที่เอาตารางทั้งหมดมาอะครับ)

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

๊UpdatedQuery
13 @R21273
ขอบคุณมากครับ ไว้ผมทำแล้วมีปัญหา จะมาถามใหม่นะครับ
14 @R21274
ขอโทษนะครับ
มันเปิดไม่ได้ครับ
ปล.ผมใช้access2007
15 @R21275
16 @R21276
ได้แล้วครับ
17 @R21277
ผมใช้ฟอร์มfrmTransactionแล้วไม่เห็นไปขึ้นที่ตารางtblTransactionเลยครับ


1.ตารางtblTransaction เป็นประวัติการเบิก
ส่วนตารางtblStock เป็นจำนวนสต็อกที่มี
ซึ่งถ้ามีการเบิกใน ตารางtblTransaction ก็จะทำให้ตารางtblStock ลดลงใช่หรือป่าวครับ

2.frmTransaction เป็นฟอร์มให้กรอกประวัติการเบิก ส่วนฟอร์มผมเป็นvbครับ

3.qryUpdateTblStock มันเอาไว้ดูยอดคงเหลือ โดยใส่ProdIDลงไปใช่มั้ยครับ
ซึ่งในสูตรได้เกี่ยวข้องกับฟอร์มfrmTransactionด้วย
แต่ฟอร์มของผมเป็นvb ยังงั้นสูตรในqryUpdateTblStock ก็เอาฟิลด์มาลบกันเฉยๆใช่มั้ยครับ


18 @R21278
และถ้าจะเพิ่มจำนวนในตารางtblStock ก็ต้องสร้างตารางคล้ายกับตารางtblTransaction เพื่อaddเข้ามาในตารางtblStockใช่หรือป่าวครับ
19 @R21279
ปกตินะครับ ลองดูตัวอย่างในไฟล์นี้ครับ
ที่นี่
20 @R21280
ขอแนะนำว่า ให้คุณดูวิธีการทำงานของไฟล์ที่ผมส่งไปให้ แล้วนำปประยุกต์ใช้กับไฟล์ของคุณ หรือจะใช้ไฟล์ของผมเป็นต้นแบบก็ได้

แต่ถ้าถามว่าถึงไฟล์ของคุณ เช่นไฟล์เป็น vb อะไรนี่ ผมตอบไม่ได้ครับ เพราะผมไม่เห็นไฟล์ของคุณเลย

ฟอร์มที่ผมสร้างไปนั้น เป็นฟอร์มเปล่าๆ ที่ไม่ได้ใช้ Record Source ไหนเลย
เมื่อป้อนข้อมูลเข้าไปในฟอร์ม ผมก็เขียน VBA เข้าไป 2 คำสั่ง
คำสั่งแรกใช้ INSERT INTO เพื่อป้อนข้อมูลเข้าไปในตาราง tblTransaction
คำสั่งที่ 2 ใช้ Updated Query เพื่อเปลี่ยนแปลงข้อมูลในตาราง tblStock
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3213s