ขึ้นฟ้อง Circular reference caused by 'QryDep'.
กระทู้เก่าบอร์ด อ.Yeadram

 1,586   5
URL.หัวข้อ / URL
ขึ้นฟ้อง Circular reference caused by 'QryDep'.

พอดีผมทำ Query ซ้อนกันถึง 3 ชั้นเพื่อจะเอาข้อมูลที่มีการคำนวนย่อยลงมา แต่พอ save แล้ว พอเปิดขึ้นมาใหม่กับฟ้อง Circular reference caused by 'QryDep'. ไม่ทราบเป็นเพราะอะไร ช่วยแนะนำด้วยครับ


ขอบคุณครับ

paitoon

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

1 @R01444
เกิดการอ้างอิงวนเวียน
ขอดู sql ครับ
2 @R01445
sql ครับ

SELECT tblGROUP_detail.GROU_CODE, tblGROUP_detail.GROU_NAME, tblMACHINE.DEP_CODE, tblMACHINE.LINE_CODE, tblMACHINE.MC_ID, tblMACHINE.MC_CODE, tblMACHINE.MC_NAME, tblMACHINE.ASSET, tblMACHINE.KW, tblMACHINE.PRICE, (select count(MC_CODE) from tblMACHINE where GROU_CODE = tblGROUP_detail.GROU_CODE) AS Totalcount, (select Avg(PRICE) from tblMACHINE where GROU_CODE = tblGROUP_detail.GROU_CODE) AS TotalAvg, [Totalcount]*[TotalAvg] AS TotalCost, Sub_SubQryDepreciation1.SumOfTotalCost
FROM Sub_SubQryDepreciation1 INNER JOIN (tblGROUP_detail INNER JOIN tblMACHINE ON tblGROUP_detail.GROU_CODE=tblMACHINE.GROU_CODE) ON Sub_SubQryDepreciation1.LINE_CODE=tblMACHINE.LINE_CODE
GROUP BY tblGROUP_detail.GROU_CODE, tblGROUP_detail.GROU_NAME, tblMACHINE.DEP_CODE, tblMACHINE.LINE_CODE, tblMACHINE.MC_ID, tblMACHINE.MC_CODE, tblMACHINE.MC_NAME, tblMACHINE.ASSET, tblMACHINE.KW, tblMACHINE.PRICE, Sub_SubQryDepreciation1.SumOfTotalCost;

ช่วยแนะนำหน่อยครับต้องแก้ไขอย่างไรดี

ขอบคุณครับ
paitoon

3 @R01446
เพิ่มเติมครับ sql แรกที่ส่งก่อนหน้านี้ คือ Query ที่ต้องใช้ข้อมธล
ส่วน 2 Query นี้ เป็นส่วยย่อยจากการ sum เพื่อเอาไปผูกกับ Query แรก

sql ย่อยส่วนที่ 1 ที่ดึงมากจาก Query แรก

SELECT QryDepreciation.LINE_CODE, QryDepreciation.TotalCost
FROM QryDepreciation
GROUP BY QryDepreciation.LINE_CODE, QryDepreciation.TotalCost;

sql ย่อยส่วนที่ 2 ที่ดึงมากจาก Query ย่อยของส่วนที่ 1

SELECT SubQryDepreciation1.LINE_CODE, Sum(SubQryDepreciation1.TotalCost) AS SumOfTotalCost
FROM SubQryDepreciation1
GROUP BY SubQryDepreciation1.LINE_CODE;

พอได้ผลจากการ sum ของส่วนย่อยที่ 2 แล้วผมก็เอาไปรวมไว้ Query แรกก่อนหน้านี้ครับ

paitoon
4 @R01452
นี่คือ object เริ่มต้นของคุณ     
1     
TYPE     TABLE
NAME     tblMachine
FIELD     MC_ID, MC_CODE, MC_NAME, GROU_CODE, DEP_CODE, LINE_CODE, ASSET, KW, PRICE , etc.

2     
TYPE     TABLE
NAME     tblGROUP_detail
FIELD     GROU_CODE, GROU_NAME, etc.

3     อันที่3 นี่เดาเต็มๆ
TYPE     Query
NAME     QryDepreciation
FIELD     LINE_CODE, TotalCost, etc.
SQL     SELECT tblMachine.LINE_CODE, tblMachine.PRICE AS TotalCost
     FROM tblMachine;

คุณต้องการหา...
1 หาว่าเครื่องจักรตัวนี้ชื่ออะไร จัดอยู่กลุ่มไหน ต้นทุนเท่าไหร่ อยู่ในไลน์การผลิตไหน
2 หาว่า จำนวนเครืองจักรในกลุ่มนี้มีกี่ตัว (TotalCount)
3 หาว่า เครื่องจักรในกลุ่มนี้ มีราคาเฉลี่ยเท่าไหร่ (TotalAvg)
4 หาว่า เครื่องจักรในกลุ่มนี้ ราคาเฉลี่ยโดยรวม เท่าไหร่ (TotalCost)
5 หาว่าเครื่องจักรทั้งหมดในไลน์การผลิตนี้ ต้นทุนรวมเท่าไหร่ (SumOfTotalCost)


ส่วนที่คุณทำมา ผมหาไม่เจอว่ามันมีจุดผิดตรงไหนเหมือนกัน แต่ผมลองเขียนอันใหม่ดูครับ

SELECT tblGROUP_detail.GROU_CODE, GROU_NAME, DEP_CODE, tblMachine.LINE_CODE, MC_ID, MC_CODE, MC_NAME, ASSET, KW, PRICE,
   (select count(MC_CODE) from tblMACHINE where GROU_CODE = tblGROUP_detail.GROU_CODE) AS TotalCount,
   (select Avg(PRICE) from tblMACHINE where GROU_CODE = tblGROUP_detail.GROU_CODE) AS TotalAvg,
   [Totalcount]*[TotalAvg] AS TotalCost, Q.tc AS SumOfTotalCost
FROM (tblGROUP_detail INNER JOIN tblMACHINE ON tblGROUP_detail.GROU_CODE = tblMACHINE.GROU_CODE) INNER JOIN
(SELECT LINE_CODE, Sum(TotalCost) AS tc FROM QryDepreciation GROUP BY LINE_CODE) AS Q
ON tblMACHINE.LINE_CODE = Q.LINE_CODE;



หรือถ้าคิวรี่อันที่ 3 ของคุณ ผมเดามันถูกว่า มันเขียนอย่างนั้นจริง คุณก็อาจไม่จำเป็นต้องใช้มันก็ได้
SELECT tblGROUP_detail.GROU_CODE, GROU_NAME, DEP_CODE, tblMachine.LINE_CODE, MC_ID, MC_CODE, MC_NAME, ASSET, KW, PRICE,
   (select count(MC_CODE) from tblMACHINE where GROU_CODE = tblGROUP_detail.GROU_CODE) AS TotalCount,
   (select Avg(PRICE) from tblMACHINE where GROU_CODE = tblGROUP_detail.GROU_CODE) AS TotalAvg,
   [Totalcount]*[TotalAvg] AS TotalCost, Q.tc AS SumOfTotalCost
FROM (tblGROUP_detail INNER JOIN tblMACHINE ON tblGROUP_detail.GROU_CODE = tblMACHINE.GROU_CODE) INNER JOIN
(SELECT LINE_CODE, Sum(PRICE) AS tc FROM tblMachine GROUP BY LINE_CODE) AS Q
ON tblMACHINE.LINE_CODE = Q.LINE_CODE;
5 @R01455
ต้องขอบคุณ คุณ yeadram มากเลยครับ ที่หาสาเหตุให้อย่างระเอียด ที่กล่าวมาทั้งหมด 5 ข้อ ถูกทุกข้อเลยครับ

1 หาว่าเครื่องจักรตัวนี้ชื่ออะไร จัดอยู่กลุ่มไหน ต้นทุนเท่าไหร่ อยู่ในไลน์การผลิตไหน
2 หาว่า จำนวนเครืองจักรในกลุ่มนี้มีกี่ตัว (TotalCount)
3 หาว่า เครื่องจักรในกลุ่มนี้ มีราคาเฉลี่ยเท่าไหร่ (TotalAvg)
4 หาว่า เครื่องจักรในกลุ่มนี้ ราคาเฉลี่ยโดยรวม เท่าไหร่ (TotalCost)
5 หาว่าเครื่องจักรทั้งหมดในไลน์การผลิตนี้ ต้นทุนรวมเท่าไหร่ (SumOfTotalCost)


แต่ผมลองทำไปเลื่อย ๆ ผมลองสร้าง QryDepreciation ตัวใหม่ เสมือนมี 2 Query เพื่อไม่ให้มีการดึง QryDepreciation วนดึงข้อมูลกัน เหมือนเป็นการหมุนวนค่า ทำให้ไม่ฟ้องอีก ผมก็เลยใช้วิธีนี้   

ต้องขอบคุณ คุณ yeadram มากครับผมที่ให้คำแนะนำครับ

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