ต้องการ Export Access Query เป็น Excel File ครับ
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 369   4
URL.หัวข้อ / URL
ต้องการ Export Access Query เป็น Excel File ครับ

เรื่องมีอยู่ว่าผมใช้คำสั่งนี้ในการ Export Query เป็น Excel File
1.
DoCmd.OutputTo acOutputQuery, "ชื่อ Query", acFormatXLS, "C:\XXX.xls", False

แต่มันมีข้อจำกัดอยู่ว่ามันเป็น Query ที่มีต้องใส่ Parameter เข้าไปมันก็สามารถทำงานได้นะครับ แต่มันรำคาญ Input box ที่ขึ้นมาให้ใส่ค่า Parameter จะทำยังไงครับที่จะสั่งในโปรแกรมให้ใส่ parameter เข้าไปได้เลย โดยไม่ต้องให้มันขึ้น Input box

หรืออีกทางนึง
2.
Set Qdf = dbs.QueryDefs("ชื่อ Query")
Qdf("ชื่อ Parameter 1") = Parameter1
Qdf("ชื่อ Parameter 2") = Parameter2
Set ReturnRecordset = Qdf.OpenRecordset(dbOpenSnapshot)

จะได้ค่าออกมาเป็น Recordset นะครับ แล้วจะเอา Recordset นี้ออกเป็น Excel File ได้มั้ยครับโดยให้ได้ format ออกมาเหมือนวิธีที่ 1.

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

1 @R05615
ก็ให้เปลี่ยนการอ้างอิง parameter ทั้ง 2 ใน Query รับจาก Text box ใน Form แทน

[Forms]![ชื่อฟอร์ม]![TextBox0]

[Forms]![ชื่อฟอร์ม]![TextBox1]
2 @R05620
ขอรบกวนอีกนิดนะครับ

Set Qdf = dbs.QueryDefs("ชื่อ Query")
Qdf("ชื่อ Parameter 1") = [Forms]![ชื่อฟอร์ม]![TextBox0]
Qdf("ชื่อ Parameter 2") = [Forms]![ชื่อฟอร์ม]![TextBox1]
Set ReturnRecordset = Qdf.OpenRecordset(dbOpenSnapshot)

หลังจากนั้นเราจะใช้ ReturnRecordset ออกเป็น Excel ด้วย
คำสั่ง
DoCmd.OutputTo acOutputQuery, "ชื่อ Query", acFormatXLS, "C:\XXX.xls", False

โดยเอา ReturnRecordset ไปแทน "ชื่อ Query" ได้หรือเปล่า หรือต้องแปลงReturnRecordset ให้เป็น TempTable ก่อนแล้วถึงจะทำได้ครับ แล้วคำสั่งที่แปลง ReturnRecordset ให้เป็น TempTable ต้องทำอย่างไรบ้างครับ

ขอบคุณมากครับ
3 @R05626
ก็ทำได้ครับ แต่มันจะยุ่งยาก คือต้องไปสร้างเป็นตารางชั่วคราวอย่างที่เข้าใจครับ
ไม่ทราบว่าเหตุผลที่ต้องการทำอย่างนี้เพราะอะไรครับ
4 @R05630
เหตุผลมันมีอยู่ว่า :
สมมติว่ามี Query อยู่ 4 ตัวนะครับ คือ A, B, C, D
โดยที่ D เกิดจาก
Select * From {ชื่อ Table ใน SQL} Where {fieldname} = [param1] ;

C เกิดจาก
Select * From D Where {fieldname} = [param2] and {fieldname} = [param3] ;

B เกิดจาก
Select * From D Where {fieldname} = [param4] ;

A เกิดจาก
Select * From C , B Where {fieldname} Between [param5] And [param6] ;

เมื่อทำงานเราจะนำ Query "A" ไปใช้เป็น output ออกเป็น Excel File แต่เมื่อใช้
DoCmd.OutputTo acOutputQuery, "A", acFormatXLS, "C:\A.xls", False

จะขึ้นให้ใส่ Input box ของ [param1], [param2], [param3], [param4], [param5], [param6] ซึ่งน่ารำคาญและเสียเวลา ผมจึงต้องการแปลง [param] เหล่านั้นให้รับค่าจาก textbox บน Form

Set Qdf = dbs.QueryDefs("A")
Qdf("param1") = txtParam1.text
Qdf("param2") = txtParam2.text
.
.
Qdf("param6") = txtParam6.text
Set ReturnRecordset = Qdf.OpenRecordset(dbOpenSnapshot)

แต่จากวิธีนี้ค่าที่ Return กลับมาได้ Type จะเป็น Recordset ซึ่งไม่สามารถใช้คำสั่ง
DoCmd.OutputTo acOutputQuery, ReturnRecordset, acFormatXLS, "C:\A.xls", False นี้ได้เพราะ มันจะรับค่าที่เฉพาะ Query หรือ Table แต่ไม่รู้จัก Recordset ผมจึงต้องการที่จะแปลง ReturnRecordset ให้มี Type เป็น Table ชื่อใดชื่อหนึ่งแล้วจึงใช้คำสั่งเดิมได้ ที่ต้องใช้วิธีนี้ก็เพราะว่ามันมี Query แบบนี้หลายตัวใน Form จึงอยากหาวิธีเพื่อจะได้เอาไปทำเป็น Function แล้วทำงานได้ประสิทธิภาพที่ดีขึ้นครับ

ขอบคุณครับที่ให้ความสนใจกับปัญหานี้

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