OleDb.DataSource ใช้สำหรับเชื่อมต่อกับฐานข้อมูล OLE DB (SQL Server, Access, MySQL ผ่าน ODBC เป็นต้น) และนำเข้าตารางหรือแสดงผลจากคำสั่ง SQL
= OleDb.DataSource(connectionString as any, [options as nullable record]) as table
= OleDb.DataSource(connectionString as any, [options as nullable record]) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| connectionString | Text or Record | Yes | สตริงหรือระเบียนที่ระบุการเชื่อมต่อ OLE DB (เช่น ‘Provider=SQLOLEDB;Server=myserver;Database=mydb;’ หรือระเบียนที่มี property ต่างๆ) | |
| options | Record | Optional | null | ระเบียนที่ปรับแต่งพฤติกรรม เช่น [Query=”SELECT…”, CommandTimeout=#duration(0,0,30,0)] |
OleDb.DataSource("Provider=SQLOLEDB;Server=localhost;Database=Sales;Integrated Security=SSPI;")= OleDb.DataSource("Provider=SQLOLEDB;Server=localhost;Database=Sales;Integrated Security=SSPI;")
ตารางแสดงรายการตารางและมุมมองทั้งหมดในฐานข้อมูล Sales
OleDb.DataSource( "Provider=SQLOLEDB;Server=myserver;Database=mydb;", [Query = "SELECT OrderID, CustomerID, Amount FROM Orders WHERE Amount > 1000"] )= OleDb.DataSource(
"Provider=SQLOLEDB;Server=myserver;Database=mydb;",
[Query = "SELECT OrderID, CustomerID, Amount FROM Orders WHERE Amount > 1000"]
)
ตารางที่มีคอลัมน์ OrderID, CustomerID, Amount เฉพาะแถวที่ Amount > 1000
OleDb.DataSource( "Provider=SQLOLEDB;Server=server.com;Database=LargeDB;", [Query = "SELECT * FROM BigTable", CommandTimeout = #duration(0, 1, 0, 0)] )= OleDb.DataSource(
"Provider=SQLOLEDB;Server=server.com;Database=LargeDB;",
[Query = "SELECT * FROM BigTable", CommandTimeout = #duration(0, 1, 0, 0)]
)
ตารางจาก BigTable หากการสืบค้นเสร็จภายใน 1 ชั่วโมง
OleDb.DataSource("Provider=MSDASQL;Driver={MySQL ODBC 8.0 DRIVER};Server=localhost;Database=mydb;UID=user;PWD=pass;")= OleDb.DataSource("Provider=MSDASQL;Driver={MySQL ODBC 8.0 DRIVER};Server=localhost;Database=mydb;UID=user;PWD=pass;")
ตารางแสดงตารางทั้งหมดจากฐานข้อมูล MySQL
OleDb.DataSource("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\data\\mydata.accdb;")= OleDb.DataSource("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\data\\mydata.accdb;")
ตารางแสดงตารางทั้งหมดในไฟล์ Access
Sql.Database ใช้สำหรับ SQL Server โดยตรง เข้าถึง metadata ตารางอัตโนมัติ ส่วน OleDb.DataSource เป็นแบบทั่วไปกว่า สามารถใช้กับฐานข้อมูลใด ๆ ที่รองรับ OLE DB (SQL Server, MySQL, Access, PostgreSQL ผ่าน ODBC เป็นต้น)
ต้องมี OLE DB Provider หรือ ODBC Driver ที่เหมาะสมในเครื่อง เช่น สำหรับ MySQL ต้องติดตั้ง MySQL ODBC Driver
ดีมาก เพราะประมวลผลกรองข้อมูลในเซิร์ฟเวอร์ก่อน ลดข้อมูลที่นำเข้า Power Query จึงเร็วขึ้นและใช้หน่วยความจำน้อยลง
ใช้ [CommandTimeout] เพื่อเพิ่มเวลาโต (เช่น 1 ชั่วโมง) หรือปรับแต่ง Query ให้มีประสิทธิภาพ เช่น เพิ่ม INDEX หรือลดจำนวนแถวตั้งแต่ต้น
หลีกเลี่ยงหากทำได้ ใช้ Integrated Security=SSPI แทนสำหรับ SQL Server หรือจัดเก็บ credential ในที่ปลอดภัยเช่น Azure Key Vault
ใช้เมื่อต้องการรายการแบนราบของตารางทั้งหมด ไม่อยากให้จัดกลุ่มตามชื่อสคีมา
OleDb.DataSource(connectionString, [options]) ส่งกลับตาราง SQL ที่มีตารางและมุมมองทั้งหมดจากแหล่งข้อมูล OLE DB ที่ระบุโดยสตริงการเชื่อมต่อ
ประโยชน์คือสามารถเข้าถึงข้อมูลจากฐานข้อมูลต่างๆ ได้โดยไม่ต้องเตรียมข้อมูลในไฟล์ Excel หรือ CSV ก่อน เหมาะสำหรับสถานการณ์ที่ข้อมูลเปลี่ยนแปลงบ่อยและต้องรีเฟรชอัตโนมัติ
ส่วนตัวผมมักใช้ OleDb.DataSource พร้อมกับ [Query] option เพื่อเขียนคำสั่ง SQL ที่ซับซ้อนในเครื่องเมื่อต้องการกรองข้อมูลหรือรวมตารางหลายตารางก่อนนำเข้า ลดขนาดข้อมูลที่ต้องประมวลผลในตัว Power Query ได้เยอะครับ 😎