25 ก.พ. 2023 เวลา 06:23 • การศึกษา

การดึงฐานข้อมูล VBA SQL

เรียกได้ว่าการใช้VBA กับข้อมูลเป็นของคู่กันเพราะว่าเราใช้VBA ในส่วนของexcelเพื่อประมวลผลข้อมูลต่างๆที่อยู่ในชีทที่อยู่ในเวิร์คบุ๊คของexcel อีกทีนึงแต่อย่างไรก็ตามการประมวลผลนั้นเราก็ต้องการข้อมูลไม่ว่าจะมาด้วยการคีย์ข้อมูลเข้าไปโดยตรงหรือการดึงข้อมูลจากข้อมูลอื่นที่มีอยู่แล้วซึ่งจะเป็นการง่ายถ้าเราได้ทำdata เอาไว้สำหรับซับพอร์ทสิ่งเหล่านี้
จึงเป็นที่มาของบทความนี้ในการดึงข้อมูลจากฐานข้อมูลหรือที่เรานิยมเรียกว่าdatabase ซึ่งฐานข้อมูลก็มีอยู่หลายรูปแบบแต่รูปแบบที่จะนำมาใช้ในวันนี้คือรูปแบบอยู่ใน SQL
ในการเชื่อมต่อและดึงข้อมูลจากฐานข้อมูลใน VBA โดยใช้รหัส SQL เราสามารถทำตามขั้นตอนเหล่านี้:
เปิด Microsoft Excel แล้วกด ALT + F11 เพื่อเปิด Visual Basic Editor
ใน Visual Basic Editor ให้ไปที่ Tools -> References แล้วเลือก "Microsoft ActiveX Data Objects" จากรายการ สิ่งนี้จะช่วยให้เราใช้ ADO เพื่อเชื่อมต่อกับฐานข้อมูล
ประกาศและตั้งค่าวัตถุการเชื่อมต่อโดยใช้รหัสต่อไปนี้:
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
การเชื่อมต่อโดยใช้สตริงการเชื่อมต่อสำหรับฐานข้อมูลเฉพาะ สตริงการเชื่อมต่อจะแตกต่างกันไปตามประเภทของฐานข้อมูลที่เรากำลังเชื่อมต่อ นี่คือตัวอย่างสำหรับฐานข้อมูล Microsoft Access:
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\database.accdb;"
ประกาศและตั้งค่าวัตถุชุดระเบียนโดยใช้รหัสต่อไปนี้:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
ใช้วัตถุชุดระเบียนเพื่อดำเนินการสอบถาม SQL และดึงข้อมูลจากฐานข้อมูล นี่คือตัวอย่างแบบสอบถาม SQL ที่ดึงข้อมูลทั้งหมดจากตารางชื่อ "ลูกค้า":
rs.Open "SELECT * FROM Customers", cn
วนซ้ำชุดระเบียนเพื่อดึงข้อมูล:
While Not rs.EOF
' Retrieve data from the recordset using rs.Fields(columnName) '
rs.MoveNext
Wend
ปิดชุดระเบียนและวัตถุเชื่อมต่อ:
rs.Close
cn.Close
ตัวอย่างของรหัสที่สมบูรณ์:
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\database.accdb;"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM Customers", cn
While Not rs.EOF
' Retrieve data from the recordset using rs.Fields(columnName) '
rs.MoveNext
Wend
rs.Close
cn.Close

ดูเพิ่มเติมในซีรีส์

โฆษณา