กระทู้เก่าบอร์ด อ.Yeadram
3,680 12
URL.หัวข้อ /
URL
ให้เลือกข้อมูลหลายอย่าง
คือว่าอันนี้เป็น โค๊ดบางส่วนที่ผมเขียนเพื่อดึงข้อมูลเขียนเป็น sql ในหน้า reportครับ
Max(IIf([inv_invoicedetail].[description] Like "คุณ*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "ห้างหุ้นส่วนจำกัด*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "หจก.*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "บ.*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "บริษัท*",[inv_invoicedetail].[description])))))) AS Owner
ปัญหาคือว่าพอผมใส่ข้อมูลมากกว่านี้เช่น ใส่เพิ่ม
IIf([inv_invoicedetail].[description] Like "พล*",[inv_invoicedetail].[description]) ประมาณนี้ครับมันจะ error ครับ เหมือนมันฟ้องว่าเราใส่ ข้อมูลเยอะเกินอะครับ หรือว่ามีวิธีอื่นที่สามารถใส่หลายๆ เหตุการณ์ได้ครับ แต่ผมลองใช้ or มันก็ฟ้องเหมือนกันครับ มันมีข้อจำกัดตรงไหนหรือเปล่าครับ
Max(IIf([inv_invoicedetail].[description] Like "คุณ*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "ห้างหุ้นส่วนจำกัด*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "หจก.*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "บ.*",[inv_invoicedetail].[description],IIf([inv_invoicedetail].[description] Like "บริษัท*",[inv_invoicedetail].[description])))))) AS Owner
ปัญหาคือว่าพอผมใส่ข้อมูลมากกว่านี้เช่น ใส่เพิ่ม
IIf([inv_invoicedetail].[description] Like "พล*",[inv_invoicedetail].[description]) ประมาณนี้ครับมันจะ error ครับ เหมือนมันฟ้องว่าเราใส่ ข้อมูลเยอะเกินอะครับ หรือว่ามีวิธีอื่นที่สามารถใส่หลายๆ เหตุการณ์ได้ครับ แต่ผมลองใช้ or มันก็ฟ้องเหมือนกันครับ มันมีข้อจำกัดตรงไหนหรือเปล่าครับ
12 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R02914
แล้วถ้ากด รัน (หน้า sql) มันจะฟ้องอย่างนี้ครับ
Wrong number of arguments used with function in query expression 'Max(IIf(...........................
ปล. Expression too complex in query expression 'Max(IIf(........................... จะฟ้องตอนกด save ครับ
Wrong number of arguments used with function in query expression 'Max(IIf(...........................
ปล. Expression too complex in query expression 'Max(IIf(........................... จะฟ้องตอนกด save ครับ
3 @R02915
บางทีมันก็ error ตอนจะเปิดเข้าไปแก้ไขโค๊ด sql ครับ มันฟ้องอย่างนี้ครับ
The expression you entered exceeds the 1,024-charater limit for the query design grid
The expression you entered exceeds the 1,024-charater limit for the query design grid
4 @R02919
1 - จำได้ว่า ใน Excel มีข้อจำกัด ห้ามซ้อน IF เกิน 7 รอบ ไม่รู้เหมือนกันว่า Access มีข้อจำกัดแบบเดียวกันบ้างหรือเปล่า แล้วจำกัดไว้ที่ กี่รอบ
2 - เงื่อนไขมันแปลกๆ มันไม่น่าจะจำเป็นต้องเขียนอย่างนั้น
- iif() ของคุณลองเปลี่ยนเป็น In() ได้ไหม หรือยังไง ผมก็เริ่มงง
- คุณใช้ Max(iif( ข้อความ )) เพื่อจะหาอะไร
- ใน iif() ทั้งหลายทั้งปวง เหมือนๆ กะลังจะไล่ลำดับความสำคัญว่าให้สนใจคำไหนมากกว่ากัน จริงๆ แล้วงานของคุณต้องการอย่างนั้นจริงหรือเปล่า
- ให้คุณลองยกตัวอย่างข้อมูล [inv_invoicedetail].[description] มาซัก 10 -15เรคคอร์ดดูได้ไหมครับ แล้วบอกมาด้วยว่า คุณต้องการเลือกอะไร อย่างไร ให้มาเป็น Owner อาจจะพอมองหาวิธีอื่นที่สามารถสนองความต้องการได้ แทนที่จะใช้ Max(IIF(ข้อความ))
2 - เงื่อนไขมันแปลกๆ มันไม่น่าจะจำเป็นต้องเขียนอย่างนั้น
- iif() ของคุณลองเปลี่ยนเป็น In() ได้ไหม หรือยังไง ผมก็เริ่มงง
- คุณใช้ Max(iif( ข้อความ )) เพื่อจะหาอะไร
- ใน iif() ทั้งหลายทั้งปวง เหมือนๆ กะลังจะไล่ลำดับความสำคัญว่าให้สนใจคำไหนมากกว่ากัน จริงๆ แล้วงานของคุณต้องการอย่างนั้นจริงหรือเปล่า
- ให้คุณลองยกตัวอย่างข้อมูล [inv_invoicedetail].[description] มาซัก 10 -15เรคคอร์ดดูได้ไหมครับ แล้วบอกมาด้วยว่า คุณต้องการเลือกอะไร อย่างไร ให้มาเป็น Owner อาจจะพอมองหาวิธีอื่นที่สามารถสนองความต้องการได้ แทนที่จะใช้ Max(IIF(ข้อความ))
5 @R02936
เอ่อ คือ In() ผมใช้ไม่เป็นอะครับ
การหา iff ของผมก็คือว่า ผมจะเก็บข้อมูลการเข้าใช้บริการ เช่น
ในรหัส 1001 จะมีข้อมูลใน Description หลายอันครับ เก็บอยู่คนละเรคคอร์ด
1001 พ่นกันสนิม
1001 ทะเบียนรถ 758ก
1001 เลขตัวถัง 12521522
1001 พลโท บรรจง จงรัก (ตรงชื่อนี่แหละครับที่ผมจะให้มาเป็น Owner)
แล้วที่เกิดปัญหาก็คือว่าโปรแกรมมันจะดึงชื่อที่นำหน้า เป็น คุณ ,บริษัท,หจก.,ออกมาแค่นี้ครับ ผมเลยแก้ให้มันหาที่มียศนำหน้าด้วยครับมันเลยต้องเขียนเยอะจนเกิดปัญหาอย่างที่ผมตั้งกระทู้แหละครับ
การหา iff ของผมก็คือว่า ผมจะเก็บข้อมูลการเข้าใช้บริการ เช่น
ในรหัส 1001 จะมีข้อมูลใน Description หลายอันครับ เก็บอยู่คนละเรคคอร์ด
1001 พ่นกันสนิม
1001 ทะเบียนรถ 758ก
1001 เลขตัวถัง 12521522
1001 พลโท บรรจง จงรัก (ตรงชื่อนี่แหละครับที่ผมจะให้มาเป็น Owner)
แล้วที่เกิดปัญหาก็คือว่าโปรแกรมมันจะดึงชื่อที่นำหน้า เป็น คุณ ,บริษัท,หจก.,ออกมาแค่นี้ครับ ผมเลยแก้ให้มันหาที่มียศนำหน้าด้วยครับมันเลยต้องเขียนเยอะจนเกิดปัญหาอย่างที่ผมตั้งกระทู้แหละครับ
6 @R02938
อันนี้คือโค๊ดเต็มๆครับ คือผมต้องใส่ or อีก 5 อย่างครับ ตอนนี้มันใส่ได้แค่นี้ครับ มันฟ้องอย่างที่บอกข้างบนครับ 1,024 character ครับ
//////////////////////////////////////////////////
SELECT inv_invoiceheader.invoicedate, inv_invoiceheader.customername, inv_invoiceheader.name, Max(IIf([inv_invoicedetail].[description] Like "รถ *",[inv_invoicedetail].[description],"")) AS Car, Max(IIf([inv_invoicedetail].[description] Like "หมายเลขตัวถัง*",[inv_invoicedetail].[description],"")) AS CarID, Max(IIf(inv_invoicedetail.description Like "คุณ*" Or inv_invoicedetail.description Like "ห้างหุ้นส่วนจำกัด*" Or inv_invoicedetail.description Like "หจก.*" Or inv_invoicedetail.description Like "บ.*" Or inv_invoicedetail.description Like "บริษัท*" Or inv_invoicedetail.description Like "พล*" Or inv_invoicedetail.description Like "พัน*" Or inv_invoicedetail.description Like "ร้อย*" Or inv_invoicedetail.description Like "จ่า*" Or inv_invoicedetail.description Like "สิบ*" Or inv_invoicedetail.description Like "บาทหลวง*" Or inv_invoicedetail.description Like "พ.*" Or inv_invoicedetail.description Like "ร.*" Or inv_invoicedetail.description Like "จ.*" Or inv_invoicedetail.description Like "ส.*" Or inv_invoicedetail.description Like "น.*" Or inv_invoicedetail.description Like "ด.*" Or inv_invoicedetail.description Like "ม.*" Or inv_invoicedetail.description Like "MR*" Or inv_invoicedetail.description Like "Miss*" Or inv_invoicedetail.description Like "Mrs.*",inv_invoicedetail.description)) AS Owner, Sum(inv_invoicedetail.quantity) AS Qty, Sum([quantity]*[unitprice]) AS Amount, inv_invoiceheader.address1, inv_invoiceheader.address2, inv_invoiceheader.address3, inv_invoiceheader.amount, inv_invoiceheader.vatamount, inv_invoiceheader.netamount, inv_invoiceheader.comment, inv_invoiceheader.invoicetype, DocumentsInv.Name AS INVNo
FROM (inv_invoicedetail INNER JOIN (inv_invoiceheader INNER JOIN inv_invoicenvoicedetail ON inv_invoiceheader.id = inv_invoicenvoicedetail.inv_invoiceheader_ida) ON inv_invoicedetail.id = inv_invoicenvoicedetail.inv_invoicedetail_idb) LEFT JOIN DocumentsInv ON inv_invoiceheader.name = DocumentsInv.Docno
GROUP BY inv_invoiceheader.invoicedate, inv_invoiceheader.customername, inv_invoiceheader.name, inv_invoiceheader.address1, inv_invoiceheader.address2, inv_invoiceheader.address3, inv_invoiceheader.amount, inv_invoiceheader.vatamount, inv_invoiceheader.netamount, inv_invoiceheader.comment, inv_invoiceheader.invoicetype, DocumentsInv.Name
HAVING (((inv_invoiceheader.invoicedate)>=[Forms]![CC-Sales Reports Dialog]![FromDate] And (inv_invoiceheader.invoicedate)<=[Forms]![CC-Sales Reports Dialog]![ToDate]) AND ((inv_invoiceheader.customername)=Trim([Forms]![CC-Sales Reports Dialog]![CustomerName])) AND ((Sum(inv_invoicedetail.quantity))=1) AND ((inv_invoiceheader.invoicetype)="ใบส่งของ"))
ORDER BY inv_invoiceheader.invoicedate;
//////////////////////////////////////////////////
SELECT inv_invoiceheader.invoicedate, inv_invoiceheader.customername, inv_invoiceheader.name, Max(IIf([inv_invoicedetail].[description] Like "รถ *",[inv_invoicedetail].[description],"")) AS Car, Max(IIf([inv_invoicedetail].[description] Like "หมายเลขตัวถัง*",[inv_invoicedetail].[description],"")) AS CarID, Max(IIf(inv_invoicedetail.description Like "คุณ*" Or inv_invoicedetail.description Like "ห้างหุ้นส่วนจำกัด*" Or inv_invoicedetail.description Like "หจก.*" Or inv_invoicedetail.description Like "บ.*" Or inv_invoicedetail.description Like "บริษัท*" Or inv_invoicedetail.description Like "พล*" Or inv_invoicedetail.description Like "พัน*" Or inv_invoicedetail.description Like "ร้อย*" Or inv_invoicedetail.description Like "จ่า*" Or inv_invoicedetail.description Like "สิบ*" Or inv_invoicedetail.description Like "บาทหลวง*" Or inv_invoicedetail.description Like "พ.*" Or inv_invoicedetail.description Like "ร.*" Or inv_invoicedetail.description Like "จ.*" Or inv_invoicedetail.description Like "ส.*" Or inv_invoicedetail.description Like "น.*" Or inv_invoicedetail.description Like "ด.*" Or inv_invoicedetail.description Like "ม.*" Or inv_invoicedetail.description Like "MR*" Or inv_invoicedetail.description Like "Miss*" Or inv_invoicedetail.description Like "Mrs.*",inv_invoicedetail.description)) AS Owner, Sum(inv_invoicedetail.quantity) AS Qty, Sum([quantity]*[unitprice]) AS Amount, inv_invoiceheader.address1, inv_invoiceheader.address2, inv_invoiceheader.address3, inv_invoiceheader.amount, inv_invoiceheader.vatamount, inv_invoiceheader.netamount, inv_invoiceheader.comment, inv_invoiceheader.invoicetype, DocumentsInv.Name AS INVNo
FROM (inv_invoicedetail INNER JOIN (inv_invoiceheader INNER JOIN inv_invoicenvoicedetail ON inv_invoiceheader.id = inv_invoicenvoicedetail.inv_invoiceheader_ida) ON inv_invoicedetail.id = inv_invoicenvoicedetail.inv_invoicedetail_idb) LEFT JOIN DocumentsInv ON inv_invoiceheader.name = DocumentsInv.Docno
GROUP BY inv_invoiceheader.invoicedate, inv_invoiceheader.customername, inv_invoiceheader.name, inv_invoiceheader.address1, inv_invoiceheader.address2, inv_invoiceheader.address3, inv_invoiceheader.amount, inv_invoiceheader.vatamount, inv_invoiceheader.netamount, inv_invoiceheader.comment, inv_invoiceheader.invoicetype, DocumentsInv.Name
HAVING (((inv_invoiceheader.invoicedate)>=[Forms]![CC-Sales Reports Dialog]![FromDate] And (inv_invoiceheader.invoicedate)<=[Forms]![CC-Sales Reports Dialog]![ToDate]) AND ((inv_invoiceheader.customername)=Trim([Forms]![CC-Sales Reports Dialog]![CustomerName])) AND ((Sum(inv_invoicedetail.quantity))=1) AND ((inv_invoiceheader.invoicetype)="ใบส่งของ"))
ORDER BY inv_invoiceheader.invoicedate;
7 @R02939
คือผมแก้มาใช้ or มันก็ใส่เงื่อนไขได้มากขั้นครับแต่มันยังไม่พออะครับ
Max(IIf(inv_invoicedetail.description Like "คุณ*" Or inv_invoicedetail.description Like "ห้างหุ้นส่วนจำกัด*" Or inv_invoicedetail.description Like "หจก.*" Or inv_invoicedetail.description Like "บ.*" Or inv_invoicedetail.description Like "บริษัท*" Or inv_invoicedetail.description Like "พล*" Or inv_invoicedetail.description Like "พัน*" Or inv_invoicedetail.description Like "ร้อย*" Or inv_invoicedetail.description Like "จ่า*" Or inv_invoicedetail.description Like "สิบ*" Or inv_invoicedetail.description Like "นาวา*" Or inv_invoicedetail.description Like "บาทหลวง*" Or inv_invoicedetail.description Like "พ.*" Or inv_invoicedetail.description Like "ร.*" Or inv_invoicedetail.description Like "จ.*" Or inv_invoicedetail.description Like "ส.*" Or inv_invoicedetail.description Like "น.*" Or inv_invoicedetail.description Like "ด.*" Or inv_invoicedetail.description Like "ม.*" Or inv_invoicedetail.description Like "MR*" Or inv_invoicedetail.description Like "Miss*" Or inv_invoicedetail.description Like "Mrs.*",inv_invoicedetail.description)) AS Owner
Max(IIf(inv_invoicedetail.description Like "คุณ*" Or inv_invoicedetail.description Like "ห้างหุ้นส่วนจำกัด*" Or inv_invoicedetail.description Like "หจก.*" Or inv_invoicedetail.description Like "บ.*" Or inv_invoicedetail.description Like "บริษัท*" Or inv_invoicedetail.description Like "พล*" Or inv_invoicedetail.description Like "พัน*" Or inv_invoicedetail.description Like "ร้อย*" Or inv_invoicedetail.description Like "จ่า*" Or inv_invoicedetail.description Like "สิบ*" Or inv_invoicedetail.description Like "นาวา*" Or inv_invoicedetail.description Like "บาทหลวง*" Or inv_invoicedetail.description Like "พ.*" Or inv_invoicedetail.description Like "ร.*" Or inv_invoicedetail.description Like "จ.*" Or inv_invoicedetail.description Like "ส.*" Or inv_invoicedetail.description Like "น.*" Or inv_invoicedetail.description Like "ด.*" Or inv_invoicedetail.description Like "ม.*" Or inv_invoicedetail.description Like "MR*" Or inv_invoicedetail.description Like "Miss*" Or inv_invoicedetail.description Like "Mrs.*",inv_invoicedetail.description)) AS Owner
8 @R02940
ช่วย Copy ตัวอย่างข้อมูลสัก 4-5 รายการมาวาง รวมทั้งระบุชื่อฟิลด์ ให้ดูหน่อยได้หรือเปล่าครับ
อธิบายด้วยครับว่า ต้องการอะไร จะได้มองภาพออก เท่าที่คุยมาแค่ดูก็ไม่อย่างแก้แล้วครับ เวียนหัว
อธิบายด้วยครับว่า ต้องการอะไร จะได้มองภาพออก เท่าที่คุยมาแค่ดูก็ไม่อย่างแก้แล้วครับ เวียนหัว
9 @R02942
ถ้าสลับซับซ้อน หันไปใช้ VBA แทนดีกว่าครับ
10 @R02949
เอ่อ ถ้างั้นรบกวนอาจารย์สันติสุขช่วยชี้แนะเรื่องการเปลี่ยนไปเขียน vba หน่อยครับ ตอนนี้ผมเองก็มึนไปหมดแล้วครับผม
11 @R02953
ปวดหัวเหมือนกัน อ่านคำอธิบายใน R02936 แล้ว ก็ยังไม่เข้าใจจุดประสงค์ของงานครับ ไม่รู้จะแนะนำยังไงดี
12 @R02964
ผมตั้งคำถามเหล่านี้ อาจช่วยให้คุณสามารถแก้ไขคิวรี่ได้ถูกต้องยิ่งขึ้น
- ทำไมต้องหาค่า Max( ) ?
- ถ้า inv_invoicedetail.description ขึ้นต้นด้วย "คุณ" , "ห้างหุ้นส่วนจำกัด" , ... ฯ ก็ให้ค่า invoicedetail.description แล้วถ้าไม่ใช่หล่ะ จะให้ค่าอะไร ? มันควรจะเป็นเงื่อนไขในฟังก์ชั่น iif( ) หรือ ? หรือว่าควรจะเป็นเงื่อนไขใน WHERE กันแน่ ?
- เงื่อนไขในส่วนของ HAVING มันน่าจะเป็นเงื่อนไขในส่วนของ WHERE เสียมากกว่า
- ส่วนของ GROUP BY จำเป็นด้วยหรือที่จะรวมกลุ่มด้วย address1,2,3,amount,... มันค่อนข้างจะพบเจอได้น้อยมากที่จะเอาฟิลด์เหล่านี้มารวมกลุ่ม เกินความจำเป็นหรือไม่ ?
- คุณสามารถสร้าง Query A เพื่อให้ได้ผลรวม เช่น Sum ของ Qty หรือ Amount แล้วค่อยสร้าง Query B โดยเรียกใช้แหล่งข้อมูลมาจาก Query A ก็ได้ เช่น หลังจากได้ผลรวมของ Qty และ Amount แล้ว ก็ค่อยมาจับกับ Name, Adrress เป็นต้น
- คุณออกแบบฐานข้อมูลผิดหรือไม่ ? หรือถ้าไม่ผิด แต่คุณดึงมาผิดเทเบิลหรือไม่ ?
คิวรี่ของคุณหน่ะ ผมเชื่อว่าผิดกับจุดประสงค์ที่คุณต้องการแน่ๆ ปัญหาคือคุณต้องอธิบายจุดประสงค์เป็นคำพูดอย่างละเอียด พร้อมทั้งโครงสร้างของเทเบิลทั้งหลายว่ามีฟิลด์อะไรบ้าง และแต่ละเทเบิลนี้มีความสัมพันธ์กันอย่างไรด้วยฟิลด์อะไรบ้าง ไม่เช่นนั้นจะไม่มีใครสามารถตอบคำถามนี้ได้เลยครับ
- ทำไมต้องหาค่า Max( ) ?
- ถ้า inv_invoicedetail.description ขึ้นต้นด้วย "คุณ" , "ห้างหุ้นส่วนจำกัด" , ... ฯ ก็ให้ค่า invoicedetail.description แล้วถ้าไม่ใช่หล่ะ จะให้ค่าอะไร ? มันควรจะเป็นเงื่อนไขในฟังก์ชั่น iif( ) หรือ ? หรือว่าควรจะเป็นเงื่อนไขใน WHERE กันแน่ ?
- เงื่อนไขในส่วนของ HAVING มันน่าจะเป็นเงื่อนไขในส่วนของ WHERE เสียมากกว่า
- ส่วนของ GROUP BY จำเป็นด้วยหรือที่จะรวมกลุ่มด้วย address1,2,3,amount,... มันค่อนข้างจะพบเจอได้น้อยมากที่จะเอาฟิลด์เหล่านี้มารวมกลุ่ม เกินความจำเป็นหรือไม่ ?
- คุณสามารถสร้าง Query A เพื่อให้ได้ผลรวม เช่น Sum ของ Qty หรือ Amount แล้วค่อยสร้าง Query B โดยเรียกใช้แหล่งข้อมูลมาจาก Query A ก็ได้ เช่น หลังจากได้ผลรวมของ Qty และ Amount แล้ว ก็ค่อยมาจับกับ Name, Adrress เป็นต้น
- คุณออกแบบฐานข้อมูลผิดหรือไม่ ? หรือถ้าไม่ผิด แต่คุณดึงมาผิดเทเบิลหรือไม่ ?
คิวรี่ของคุณหน่ะ ผมเชื่อว่าผิดกับจุดประสงค์ที่คุณต้องการแน่ๆ ปัญหาคือคุณต้องอธิบายจุดประสงค์เป็นคำพูดอย่างละเอียด พร้อมทั้งโครงสร้างของเทเบิลทั้งหลายว่ามีฟิลด์อะไรบ้าง และแต่ละเทเบิลนี้มีความสัมพันธ์กันอย่างไรด้วยฟิลด์อะไรบ้าง ไม่เช่นนั้นจะไม่มีใครสามารถตอบคำถามนี้ได้เลยครับ
Time: 0.3589s
Expression too complex in query expression 'Max(IIf(...........................