สอบถามเรื่อง stored procedure ครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,057   7
URL.หัวข้อ / URL
สอบถามเรื่อง stored procedure ครับ

สวัสดีครับ ผมมีเรื่องรบกวนสอบถามสมาชิกดังนี้
ผม มีโปรแกรม ms access ที่ link database ผ่าน odbc ไปที่ ms sql
มี query ที่ทดลองเขียนโดย join หลาย table แต่ทดลองรันบน sql management ก็สามารถรันได้ปกติ ใช้เวลาไม่ถึงวินาที เรคคอร์ดแค่หลักพันนะครับ บางครั้งไม่ถึงพัน แต่ประมาณหลักร้อยปลายๆ
แต่ถ้าหากเรียก query นี้ผ่าน access จะใช้เวลาค่อนข้างนาน เป็นหลักนาที

ผมก็เลยคิดว่าไปเขียนเป็น stored procedure บน ms sql แล้วหวังว่าจะใช้ access เรียกผ่าน query ไป ทีนี้ทดลองเรียกโดยส่ง parameter ไปตรงๆ query สามารถทำงานได้เร็วกว่าเดิมแทบโดยใช้เวลาไม่ถึงวินาที โดยใช้ query แบบ พาส-ทรู (ไม่แน่ใจว่าถูกขั้นตอนไหม) แล้วใช้คำสั่ง exec ,
แต่ถ้าหากผมต้องการส่งเป็นตัวแปรจากฟอร์ม หรืออื่นๆ ต้องเขียนยังไงครับ เช่น [form]![Form1]![text] คือลองแล้วมันไม่สามารถส่งไปได้ ไม่เคยเขียน access มาก่อน แต่โดนมอบหมายมา ก็อาศัย google ช่วยครับ แต่อันนี้พยายามหลายวิธีแล้ว
ขอความกรุณาชี้แนะด้วยครับ ขอบคุณครับ

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

1 @R23703
การเขียนอ้างอิงผ่านฟอร์ม เท่าที่ทราบ จะเป็น Forms![ชื่อฟอร์ม]![ชื่อฟิวด์] นะครับ
2 @R23705
ครับผมก็อ้างอิงลักษณะนั้นครับ แต่อาการคือ query ไม่เจอ reccord เลย
ไม่ได้ฟ้องว่า syntax error ครับ
3 @R23706
ถ้าอ้างลักษณะนี้ ต้องเปิดฟอร์มที่อ้างไว้ด้วยนะครับ
4 @R23707
ฟอร์มเปิดครับผม
ขอบคุณครับ
5 @R23708
ไม่เคยทำนะครับ แต่เค้าก็ใช้อ้างพารามิเตอร์แบบที่ใช้กันบน MS Access นี่แหละครับ ก็ใช้ได้นะ มันอยู่ที่วิธีการเขียนโค๊ดด้วยครับ ดูตัวอย่างในเว็บดูครับ

http://oakdome.com/programming/MSAccess_StoredProcedureDataSource.php
6 @R23709
ไม่เคยมีโอกาสได้ทำเหมือนกันครับ เพราะโปรแกรมสมัยใหม่จะมีพวก Framework ช่วยจัดการเลยไม่จำเป็นต้องใช้ แต่เป็นแนวคิดที่ดีเพราะมันจะช่วยลดการอ่านข้อมูลหลายๆครั้งซ้ำไปซ้ำมาในการส่งข้อมูลระหว่างฐานข้อมูลกับตัวโปรแกรมได้ แต่เพราะโปรแกรมสมัยใหม่มันมีตัวจัดให้แล้วเลยโง่ลงไม่เคยใช้คำสั่งพวกนี้แล้ว เท่าที่เคยอ่านเจอหลักการใช้มันจะเป็นประมาณนี้ครับ

สมมุติคุณสร้าง Pass-Through Query ที่ ms sql ของคุณชื่อ sproc_MySproc

คุณเขียนโค๊ดใส่ในฟอร์ม MS Access หรือสร้างเป็นฟังก์ชั่นไว้ หากต้องการเรียกใช้ในเหตุการณ์ใดๆ

Dim qdf As QueryDef
Dim frm As Form
' Set database variable to current database.
Set dbsReport = CurrentDb
Set frm = 'ชื่อฟอร์ม
' Open QueryDef object.
Set qdf = dbsReport.QueryDefs("sproc_MySproc")
Dim rstReport As DAO.Recordset
qdf.SQL = "EXEC sproc_mySproc " & ' ใส่ค่าพารามิเตอร์ที่ต้องการใส่ อ้างจากตัวคอนโทรลได้เลย
qdf.ReturnsRecords = True
' Open Recordset object.
Set rstReport = qdf.OpenRecordset()
rstReport.MoveFirst
ชื่อฟอร์ม.RecordSource = "sproc_mySproc"

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