181
ห้อง MS Access / > > สอบถามการทำ Query ข้อมูลจากตารางครับ
« เมื่อ: 05 พ.ค. 61 , 16:57:35 »เดี่ยวทำตัวอย่างให้ดูครับ ถ้ามีไฟล์ตัวอย่างก็ดีครับ :Dไม่รู้ที่ผมอธิบายไปจะพอเข้าใจหรือเปล่าครับ
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
เดี่ยวทำตัวอย่างให้ดูครับ ถ้ามีไฟล์ตัวอย่างก็ดีครับ :Dไม่รู้ที่ผมอธิบายไปจะพอเข้าใจหรือเปล่าครับ
1.ผมใช้การ UNION All ที่ Date และ ODNo ก่อนว่ามีอะไรบ้างรบกวนสอบถามเพิ่มเติมครับ จากรูป
2.ในแต่ละคิวรี่ ผมให้ Group By และ Sum Total ไว้เลย
3.เอามา Join กับ GroupDate&ODno โดยกำหนดว่าถ้า ODno ไหน มีเหมือนกัน ให้แสดงผลรวมออกมา ครับ
วิธีผมอาจจะดูเยอะไป หรือเปล่า พี่อาจจะลองเอาไป ประยุกต์ดูนะครับ เพื่อเจอแบบที่ง่ายกว่า
ผลลัพท์ที่ได้ ครับ
อันนี้ถ้ากรองแค่วันที่ 1 วันเดียว
แลกเปลี่ยนความรู้กันคับพี่ เจอเคสใหม่ๆเราได้ศึกษาทำกันคับรบกวนสอบถามเพิ่มเติมนะครับ ที่ผมเคยเกริ่นไว้
ขอบคุณมากครับคุณNewbies ทำตามที่แนะนำได้แล้วครับ แต่หลักการทำงานจริงๆต้องเรียนรู้และทำความเข้าใจเพิ่มเติม เพราะผมเพิ่งหัดเขียนครับ ตอนนี้ยังงงกับอีกตารางหนึ่งครับ ขอลองลองผิดลองถูกด้วยตัวเองดูก่อนนะครับ ถ้าไม่ได้ยังไงคงต้องรบกวนอีกครั้งนะครับส่งไฟล์ตัวอย่างมาให้ดูครับติดปัญหาจริงๆด้วยครับท่านแต่ถ้าจะสร้างดัดแปลงการค้นหาแบบนี้ได้ไหม
1.เมื่อได้ Crosstab มาแล้ว ให้ Append มายัง ตารางใหม่ และ กำหนด Form กับตารางใหม่นั้นมันก็จะสามารถค้นหาได้เหมือนกันครับโค๊ด: [Select]Private Sub Command62_Click()
DoCmd.ApplyFilter , "[DateA] Between Forms.FinalOutput.DateFrom And Forms.FinalOutput.DateTo"
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM TblFinalOutput"
DoCmd.OpenQuery "MakeTblFinalOutput", acViewNormal
Me.Form.Requery
End Sub
นำไปใว้ในปุ่มสถานะ Clickต้องขอบคุณมากสำหรับความช่วยเหลือนะครับ แต่ยังคงไม่ได้ครับ ปกติผมใช้คำสั่งพวกนี้กับฟอร์มที่สร้างจาก query ก็ไม่มีปัญหาอะไร สังเกตว่าฟอร์มนี้สร้างจาก query ที่เป็น crosstab query ก็เลยไม่รู้ว่าต้องทำยังไงครับโค๊ด: [Select]Me.Filter = "[DateA] Between Forms.FinalOutput.DateFrom And Forms.FinalOutput.DateTo"
Me.FilterOn = True
หรือ จะใช้ DoCmd.ApplyFilter ก็ทำได้ ตัวอย่างตามนี้ครับโค๊ด: [Select]DoCmd.ApplyFilter , "[DateA] Between Forms.FinalOutput.DateFrom And Forms.FinalOutput.DateTo"
ตัวอย่างด้านล่าง
ไม่ต้องอ้างคำสั่ง form!... แล้วคับ ใส่ชื่อ control ที่ ระบุวันที่ได้เลยก็ยังไม่ได้ครับ
ใช้คิวรีสร้าง Datasheet แล้วใช้คิวรีอันนี้สร้างรีพอร์ตครับ[ข้อมูลที่แสดงในฟิวด์ที่กรอง] และกรอง1 กรอง2 คืออะไรครับ รบกวนอธิบายเพิ่มเติมหรือพอจะมีตัวอย่างมั้ยครับ
ถ้าจะบอกว่าด้วยเหตุผลอะไรก็แล้วแต่ ไม่สามารถใช้คิวรีได้ ก็ต้องเขียนโค้ดที่อ้างถึงตัวกรองใน Datasheet
ประมาณนี้ครับ
SELECT ชื่อตาราง.* FROM ชื่อตาราง LEFT JOIN ชื่อฟิลด์ที่กรอง AS Lookup_ชื่อฟิลด์ที่กรอง ON ชื่อฟิลด์ที่กรอง = Lookup_ชื่อฟิลด์ที่กรอง.ชื่อฟิลด์ที่กรอง WHERE (([Lookup_ชื่อฟิลด์ที่กรอง].[ข้อมูลที่แสดงในฟิลด์ที่กรอง] In ("กรอง1","กรอง2")));
ใช้คิวรีง่ายกว่าครับ ช่วงนี้ไม่ถนัดเรื่องเครียด
ถ้าบอกว่าสร้างจากคิวรีตั้งแต่แรกก็จบแล้วครับขอบคุณครับอาจารย์ แต่ผมก็ยังไม่เข้าใจอยู่ดี จะว่าโง่ก็ได้ครับ ยกตัวอย่างถ้าผมใช้ตัวกรองใน data sheet ผมสามารถกรองได้หลายเงื่อนไขเลย เช่น จะเลือก print เฉพาะลูกค้า BOLO และเลือกบาง Style และเลือกบาง shipment ใน Query มันจะยังไงอะครับ เป็นไปได้พอแนะนำตัวอย่างเพื่อให้เห็นภาพได้หรือเปล่าครับ ขอบคุณครับ
ดังนั้นโปรดแจ้งข้อมูลให้ละเอียดตั้งแต่แรก อ้างคำพูดอาจารย์สันติสุข ๓(_ _)๓
ในเมื่อใช้ ในเมื่อใช้คิวรี
1. ก็ให้คิวรีเป็นตัวกรองข้อมูลแทน อย่าใช้ฟิลเตอร์ใน Datasheet
2. สร้างรีพอร์ตจากคิวรีเดียวกับ Datasheet
3. ที่ปุ่มก็ใส่คำสั่ง docmd.openreport
แค่นี้ครับ อาจต้องใช้คำสั่ง docmd.requery ในบางจุดเพื่อให้คิวรีกรองข้อมูลแล้วแสดงใน Datasheet
ใช้คิวรีสร้าง Datasheet แล้วใช้คิวรีอันนี้สร้างรีพอร์ตครับใช่ครับ ผมใช้คิวรีสร้าง Datasheet แล้วใช้คิวรีอันนี้สร้างรีพอร์ตครับ แต่เราจะopen reportยังไงถึงจะให้ข้อมูลที่ออกreportเหมือนกันกับขอมูลที่filterในdatasheet ครับ งงครับ พอดีเพิ่งหัดเขียนอะครับ
ถ้าจะบอกว่าด้วยเหตุผลอะไรก็แล้วแต่ ไม่สามารถใช้คิวรีได้ ก็ต้องเขียนโค้ดที่อ้างถึงตัวกรองใน Datasheet
ประมาณนี้ครับ
SELECT ชื่อตาราง.* FROM ชื่อตาราง LEFT JOIN ชื่อฟิลด์ที่กรอง AS Lookup_ชื่อฟิลด์ที่กรอง ON ชื่อฟิลด์ที่กรอง = Lookup_ชื่อฟิลด์ที่กรอง.ชื่อฟิลด์ที่กรอง WHERE (([Lookup_ชื่อฟิลด์ที่กรอง].[ข้อมูลที่แสดงในฟิลด์ที่กรอง] In ("กรอง1","กรอง2")));
ใช้คิวรีง่ายกว่าครับ ช่วงนี้ไม่ถนัดเรื่องเครียด
ผมว่ามันเป็นเรื่องใหม่นะครับ ตั้งกระทู้ใหม่เถอะครับรบกวนอาจารย์ตามไปชี้ทางสว่างให้ด้วยนะครับ