C# WinApp งง กับ Datawizard ครับ มันเปิดใน datagrid แล้ว Error
เดาว่าระบบน่าจะสร้าง key หลัก ไม่ได้ครับ
อาจจะมีข้อมูลบางบรรทัดที่เหมือนกันทุกคอลัมภ์เลย
Date :
2018-04-23 11:31:06
By :
fonfire
จากที่งมๆ มาซักครึ่งวันพบว่าตัวปัญหาคือ ตาราง Reagent_In ครับ
หากไม่มี Reagent_In จะได้แบบนี้
ใน datagridview
พอเพิ่ม Reagent_In เลือก ฟิลด์มา ก็ Error เลย
ผมลองเอาแค่ เพิ่มตารางมาเฉยๆ
ยังไม่ทันได้เลือกฟิลด์ ใดๆเลย ก็ Error แล้วเช่นกัน
Code (SQL)
SELECT Reagent_List.Reagent_List_ID, Reagent_List.Reagent_ID, Reagent_List.Reagent_List_Name_1, Reagent_List.Formula, Reagent_Type.Reagent_Type_1,
Reagent_Grad.Reagent_Grad_1, Reagent_In.Reagent_In_Date, Reagent_In.Reagent_Ex, Reagent_In.Reagent_In_File_1
FROM Reagent_Grad LEFT OUTER JOIN
Reagent_List ON Reagent_Grad.Reagent_Grad_ID = Reagent_List.Reagent_Grad_ID LEFT OUTER JOIN
Reagent_Type ON Reagent_List.Reagent_Type_ID = Reagent_Type.Reagent_Type_ID LEFT OUTER JOIN
Reagent_In ON Reagent_List.Reagent_List_ID = Reagent_In.Reagent_List_ID
WHERE (Reagent_In.Reagent_Using = 1)
ORDER BY Reagent_Grad.Reagent_Grad_1
แปลกใจตรงที่แค่เพิ่ม ตาราง ก้ Error แล้วทั้งๆที่ไม่ได้เลือก ฟิลด์มาใช้งานเลยนี่ละครับ
Date :
2018-04-23 18:00:18
By :
lamaka.tor
ล่าสุดที่ได้ข้อมูลมา 45 แถว
มีข้อมูลแถวไหนที่ซ้ำกันทั้งชุดไหมครับ
Date :
2018-04-24 08:14:38
By :
fonfire
key เป็น int หรือ string และ Error คิดว่าเกิดจากค่า null ของ key หรือ null ของ column ครับ
ลองรัน Query ที่ database แทน แล้วค่อย join ทีละ เทเบิล
แทนการลากวางครับ (มันอาจจะไม่ต่างกันแต่ผมเลือกวิธีนี้พิมพ์เอามันกว่า 555)
คุณ tor คงเข้าใจเรื่อง inner join left join outer join หรือ join ต่างๆแล้วใช่ไหมครับ
มาลองเล่น sub query ดูครับ แล้วจะรู้ว่าการเขียน query แทนการลากวางมันกว่าจริงๆ
Date :
2018-04-24 09:41:59
By :
บัญดิษฐ
ตอบความคิดเห็นที่ : 3 เขียนโดย : fonfire เมื่อวันที่ 2018-04-24 08:14:38
รายละเอียดของการตอบ ::
มีครับ ที่มี 45 เพราะผม ดึงมามาหมดทุกแถวครับ
แต่พอใช้ Reagent_In.Reagent_Using = 1 จะเหลือ 28 ครับ
ตอบความคิดเห็นที่ : 4 เขียนโดย : บัญดิษฐ เมื่อวันที่ 2018-04-24 09:41:59
รายละเอียดของการตอบ ::
key เป็น int ครับ เรื่อง sub query ก็พอรู้งูๆปลาๆ ครับ ยังไม่เคยทำจริงๆจังๆครับ อาจจะต้องลองเขียนดูครับ
ด้วยความที่คิดว่าตัวเองไม่ใช่ โปรแกรมเมอร์มืออาชีพ อาศัย แค่ว่าเขียนให้แล็บใช้งานเลยเน้นใช้ wizard component ครับ
แต่ถ้า เขียน query มันดีกว่าก็อาจจะต้องสร้าง คลาส มารองรับอีกทีละครับ เพราะถ้าให้เขียนใน หน้าฟอร์มคงไม่ไหว ตอนนี้หน้าฟอร์มผมเยอะขึ้นเรื่อยๆ เพราะมีแต่คนอย่ากได้โน่น อยากได้นี่ ครับ
ตอนแรกคิดว่าเป็นที่ Null ที่ PK เลยเช็คใน SQL ดู
แต่หลังจากที่ทำการแก้ไขแล้วก็ยังเป็นเหมือนเดิมครับ
ตัวนี้เป็น โค้ด SQL ครับ
Code (SQL)
SELECT dbo.Reagent_List.Reagent_List_ID, dbo.Reagent_List.Reagent_ID, dbo.Reagent_List.Reagent_List_Name_1, dbo.Reagent_List.Formula,
dbo.Reagent_Type.Reagent_Type_1, dbo.Reagent_Grad.Reagent_Grad_1, dbo.Reagent_In.Reagent_In_Date, dbo.Reagent_In.Reagent_Ex,
dbo.Reagent_In.Reagent_In_File_1, dbo.Reagent_In.Reagent_Using, dbo.Reagent_In.Reagent_In_Manrecord
FROM dbo.Reagent_Grad INNER JOIN
dbo.Reagent_List ON dbo.Reagent_Grad.Reagent_Grad_ID = dbo.Reagent_List.Reagent_Grad_ID INNER JOIN
dbo.Reagent_In ON dbo.Reagent_List.Reagent_List_ID = dbo.Reagent_In.Reagent_List_ID INNER JOIN
dbo.Reagent_Type ON dbo.Reagent_List.Reagent_Type_ID = dbo.Reagent_Type.Reagent_Type_ID
WHERE (dbo.Reagent_In.Reagent_Using = 1)
Date :
2018-04-24 10:41:19
By :
lamaka.tor
ความต้องการคืออย่างไงครับ ต้องการเทเบิลไหนเป็นหลัก
ถ้าใช้ inner join ถ้าข้อมูลไม่ตรงทั้ง 2 เทเบิล(id ที่ join) จะไม่แสดงข้อมูลนะครับ
ลองใช้ left join ดู ครับ
Date :
2018-04-24 10:50:05
By :
บัญดิษฐ
เดาเอาน่ะครับ
เป็นเพราะ ID ที่ 24 มันมี 2 บรรทัด หรือปล่าวครับ
ลองเอารายการที่ 24 ออก
หรือแก้ให้มันมีบรรทัดเดียวดูครับ
Date :
2018-04-24 10:57:04
By :
fonfire
คิดว่าน่าจะเป็นเพราะ เปิดการ Edit ของ DataGrid ไว้ครับ
ถ้าเอาข้อมูลมาแสดงเฉย ๆ ไม่น่าเป็นไร
แต่ถ้าจะแก้ไขข้อมูลผ่าน DataGrid ด้วย
มันก็ต้องเป็นข้อมูลที่ชัดเจน
และห้ามซ้ำซ้อนกัน
Date :
2018-04-24 11:21:34
By :
fonfire
ใช่อย่างที่ท่าน fonfire ว่าไว้ครับ ID ที่ 24 มันมี 2 บรรทัด มันซ้อนกัน ผมลอง ทำตัวหนึ่ง เป็น false แล้วได้จริงๆครับ
งั้นปัญหาใหม่ก็คือ
ถ้าหา ID หนึ่งมีสารเคมีที่ใช้งานอยู่ 2 ขวด อย่างที่กรณี ID ที่ 24 ที่มีการใช้งาน 2 ขวด
เราจะโชว์ ทั้ง 2 ได้ยังไง ครับ
Date :
2018-04-24 14:22:18
By :
lamaka.tor
โปรแกรมต้องมีการแก้ไขข้อมูลผ่าน DataGrid ไหมครับ
ถ้าแค่แสดงผลอย่างเดียว
ผมคิดว่าถ้าปิดการ Add/Edit/Update/Delete ไปน่าจะได้น่ะครับ
ไม่แน่ใจว่าใน DataWizard มันตั้งได้หรือปล่าว
Date :
2018-04-24 15:31:01
By :
fonfire
Load balance : Server 03