เมื่อเราใช้การเขียนโปรแกรม Excel เรามักจะต้องใช้ฐานข้อมูล
แล้วจะเชื่อมต่อกับฐานข้อมูลแล้วอ่านข้อมูลจากฐานข้อมูลได้อย่างไร?
VBA เชื่อมต่อกับอินสแตนซ์ฐานข้อมูล SQL SERVER:
Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 'String เพื่อเชื่อมต่อกับฐานข้อมูล strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ ผู้ใช้ ];รหัสผ่าน=[รหัสผ่าน];แค็ตตาล็อกเริ่มต้น=[ฐานข้อมูล];แหล่งข้อมูล=[ที่อยู่ IP ฐานข้อมูลหรือชื่อเซิร์ฟเวอร์ฐานข้อมูล];เชื่อมต่อ Timeout=720; " 'คำสั่งสืบค้น หากคำสั่ง sql ยาวมาก คุณสามารถใช้ strSQL=strSQL+ เพื่อเชื่อมโยงคำสั่งที่แบ่งออกเป็นหลายย่อหน้า หากคำสั่งสั้นมาก คุณสามารถเขียนได้เพียงบรรทัดเดียวเท่านั้น strSQL = "select * from Hy_KPI_Shop_Dept_WeekRpt " strSQL = strSQL+"where sdate='2014-01-01' เรียงลำดับตาม sdate,shopid " Set conn = ADODB.Connection Set ใหม่ ds = ADODB.Recordset ใหม่ 'เปิดการเชื่อมต่อฐานข้อมูล conn.Open strConn 'ประโยคนี้และเชื่อมต่อที่สตริงการเชื่อมต่อฐานข้อมูล Timeout=720 หมายความว่าถ้าคำสั่งทำงานเป็นเวลานาน สองประโยคนี้สามารถขยายเวลารอของ VBA ได้ หากไม่มีสองประโยคนี้ VBA มักจะรายงานการหมดเวลาของคิวรี conn.CommandTimeout = 720 ด้วย ds 'รับข้อมูลตามคำสั่งแบบสอบถาม เปิด strSQL, conn 'ควบคุมการเพิ่มส่วนหัวของคอลัมน์ทั้งหมดโดยอัตโนมัติสำหรับ col = 0 ถึง ds.Fields.Count - 1 'โปรดทราบว่าพารามิเตอร์ใน Offset( 0, col) ต้องเป็น เพื่อให้ถูกต้อง ประโยคนี้หมายความว่าชื่อเรื่องจะถูกเขียนในแถวแรก โดยเริ่มจากเซลล์ A1 หากคุณไม่ต้องการเขียนแถวชื่อเรื่อง คุณสามารถแสดงความคิดเห็นในประโยคต่อไปนี้ได้ Worksheets("KPI weekly report for each class in the store").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next 'เพิ่มแถวข้อมูลทั้งหมด ประโยคนี้หมายถึง ว่าผลลัพธ์ของแบบสอบถามจะถูกเขียน ในแถวแรกเริ่มจากเซลล์ A1 แต่เนื่องจากแถวชื่อเรื่องถูกเขียนในแถวแรก แถวนี้จึงเขียนจากแถวด้านล่างชื่อเรื่อง Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With 'ปิดการเชื่อมต่อฐานข้อมูลและล้างทรัพยากร Set ds = Nothing conn.Close Set conn = Nothing