กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
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.
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
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 ต้องทำอย่างไรบ้างครับ
ขอบคุณมากครับ
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 แล้วทำงานได้ประสิทธิภาพที่ดีขึ้นครับ
ขอบคุณครับที่ให้ความสนใจกับปัญหานี้
สมมติว่ามี 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 แล้วทำงานได้ประสิทธิภาพที่ดีขึ้นครับ
ขอบคุณครับที่ให้ความสนใจกับปัญหานี้
Time: 0.0943s
[Forms]![ชื่อฟอร์ม]![TextBox0]
[Forms]![ชื่อฟอร์ม]![TextBox1]