Thep Excel

OleDb.DataSource – เชื่อมต่อฐานข้อมูล OLE DB

OleDb.DataSource ใช้สำหรับเชื่อมต่อกับฐานข้อมูล OLE DB (SQL Server, Access, MySQL ผ่าน ODBC เป็นต้น) และนำเข้าตารางหรือแสดงผลจากคำสั่ง SQL

= OleDb.DataSource(connectionString as any, [options as nullable record]) as table

By ThepExcel AI Agent
12 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

= 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)]

Examples

เชื่อมต่อ SQL Server พื้นฐาน
OleDb.DataSource("Provider=SQLOLEDB;Server=localhost;Database=Sales;Integrated Security=SSPI;")
เชื่อมต่อกับ SQL Server บนเครื่องเดียวกัน ใช้การรับรองความถูกต้อง Windows โดยอัตโนมัติ
Power Query Formula:

= OleDb.DataSource("Provider=SQLOLEDB;Server=localhost;Database=Sales;Integrated Security=SSPI;")

Result:

ตารางแสดงรายการตารางและมุมมองทั้งหมดในฐานข้อมูล Sales

ดึงข้อมูลจากตารางด้วย Query
OleDb.DataSource( "Provider=SQLOLEDB;Server=myserver;Database=mydb;", [Query = "SELECT OrderID, CustomerID, Amount FROM Orders WHERE Amount > 1000"] )
ใช้ [Query] option เพื่อกรองข้อมูลในเซิร์ฟเวอร์ ประหยัดแบนด์วิดท์และการประมวลผล
Power Query Formula:

= OleDb.DataSource(
    "Provider=SQLOLEDB;Server=myserver;Database=mydb;",
    [Query = "SELECT OrderID, CustomerID, Amount FROM Orders WHERE Amount > 1000"]
)

Result:

ตารางที่มีคอลัมน์ OrderID, CustomerID, Amount เฉพาะแถวที่ Amount > 1000

กำหนด Command Timeout
OleDb.DataSource( "Provider=SQLOLEDB;Server=server.com;Database=LargeDB;", [Query = "SELECT * FROM BigTable", CommandTimeout = #duration(0, 1, 0, 0)] )
ตั้ง CommandTimeout เป็น 1 ชั่วโมง (#duration ระบุ ชั่วโมง:นาที:วินาที) เหมาะสำหรับคำสั่ง SQL ที่ใช้เวลานาน
Power Query Formula:

= OleDb.DataSource(
    "Provider=SQLOLEDB;Server=server.com;Database=LargeDB;",
    [Query = "SELECT * FROM BigTable", CommandTimeout = #duration(0, 1, 0, 0)]
)

Result:

ตารางจาก BigTable หากการสืบค้นเสร็จภายใน 1 ชั่วโมง

เชื่อมต่อ MySQL ผ่าน ODBC
OleDb.DataSource("Provider=MSDASQL;Driver={MySQL ODBC 8.0 DRIVER};Server=localhost;Database=mydb;UID=user;PWD=pass;")
ใช้ ODBC Driver ในการเชื่อมต่อ MySQL ระบุชื่อผู้ใช้และรหัสผ่าน
Power Query Formula:

= OleDb.DataSource("Provider=MSDASQL;Driver={MySQL ODBC 8.0 DRIVER};Server=localhost;Database=mydb;UID=user;PWD=pass;")

Result:

ตารางแสดงตารางทั้งหมดจากฐานข้อมูล MySQL

เชื่อมต่อ Access Database
OleDb.DataSource("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\data\\mydata.accdb;")
ใช้ Access Database Engine เพื่อเชื่อมต่อไฟล์ .accdb ระบุเส้นทางแบบเต็มของไฟล์
Power Query Formula:

= OleDb.DataSource("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\data\\mydata.accdb;")

Result:

ตารางแสดงตารางทั้งหมดในไฟล์ Access

FAQs

OleDb.DataSource ต่างจาก Sql.Database อย่างไร

Sql.Database ใช้สำหรับ SQL Server โดยตรง เข้าถึง metadata ตารางอัตโนมัติ ส่วน OleDb.DataSource เป็นแบบทั่วไปกว่า สามารถใช้กับฐานข้อมูลใด ๆ ที่รองรับ OLE DB (SQL Server, MySQL, Access, PostgreSQL ผ่าน ODBC เป็นต้น)

ต้องติดตั้งอะไรเพิ่มเติมหรือไม่

ต้องมี OLE DB Provider หรือ ODBC Driver ที่เหมาะสมในเครื่อง เช่น สำหรับ MySQL ต้องติดตั้ง MySQL ODBC Driver

ใช้ [Query] ดีไหม

ดีมาก เพราะประมวลผลกรองข้อมูลในเซิร์ฟเวอร์ก่อน ลดข้อมูลที่นำเข้า Power Query จึงเร็วขึ้นและใช้หน่วยความจำน้อยลง

ถ้า Query ใช้เวลานาน ต้องทำยังไง

ใช้ [CommandTimeout] เพื่อเพิ่มเวลาโต (เช่น 1 ชั่วโมง) หรือปรับแต่ง Query ให้มีประสิทธิภาพ เช่น เพิ่ม INDEX หรือลดจำนวนแถวตั้งแต่ต้น

ต้องระบุ password ในสตริงการเชื่อมต่อหรือไม่

หลีกเลี่ยงหากทำได้ ใช้ Integrated Security=SSPI แทนสำหรับ SQL Server หรือจัดเก็บ credential ในที่ปลอดภัยเช่น Azure Key Vault

HierarchicalNavigation=false ใช้เมื่อไหร่

ใช้เมื่อต้องการรายการแบนราบของตารางทั้งหมด ไม่อยากให้จัดกลุ่มตามชื่อสคีมา

Resources & Related

Additional Notes

OleDb.DataSource(connectionString, [options]) ส่งกลับตาราง SQL ที่มีตารางและมุมมองทั้งหมดจากแหล่งข้อมูล OLE DB ที่ระบุโดยสตริงการเชื่อมต่อ

ประโยชน์คือสามารถเข้าถึงข้อมูลจากฐานข้อมูลต่างๆ ได้โดยไม่ต้องเตรียมข้อมูลในไฟล์ Excel หรือ CSV ก่อน เหมาะสำหรับสถานการณ์ที่ข้อมูลเปลี่ยนแปลงบ่อยและต้องรีเฟรชอัตโนมัติ

ส่วนตัวผมมักใช้ OleDb.DataSource พร้อมกับ [Query] option เพื่อเขียนคำสั่ง SQL ที่ซับซ้อนในเครื่องเมื่อต้องการกรองข้อมูลหรือรวมตารางหลายตารางก่อนนำเข้า ลดขนาดข้อมูลที่ต้องประมวลผลในตัว Power Query ได้เยอะครับ 😎

Leave a Reply

Your email address will not be published. Required fields are marked *