---
title: OleDb.DataSource – เชื่อมต่อฐานข้อมูล OLE DB
url: https://www.thepexcel.com/functions/power-query/accessing-data-functions/oledb-datasource/
type: function-explainer
program: Power Query
syntax: "= OleDb.DataSource(connectionString as any, [options as nullable record]) as table"
date: 2025-12-12
updated: 2025-12-24
scores:
  popularity: 5
  difficulty: 5
  usefulness: 5
---

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

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

## คำอธิบาย

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

## Syntax

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

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| connectionString | Yes | Text or Record |  | สตริงหรือระเบียนที่ระบุการเชื่อมต่อ OLE DB (เช่น 'Provider=SQLOLEDB;Server=myserver;Database=mydb;' หรือระเบียนที่มี property ต่างๆ) |
| options | No | Record | null | ระเบียนที่ปรับแต่งพฤติกรรม เช่น [Query="SELECT...", CommandTimeout=#duration(0,0,30,0)] |

## ตัวอย่าง

### 1. เชื่อมต่อ SQL Server พื้นฐาน

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

**ผลลัพธ์:** `ตารางแสดงรายการตารางและมุมมองทั้งหมดในฐานข้อมูล Sales`

เชื่อมต่อกับ SQL Server บนเครื่องเดียวกัน ใช้การรับรองความถูกต้อง Windows โดยอัตโนมัติ

### 2. ดึงข้อมูลจากตารางด้วย Query

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

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

ใช้ [Query] option เพื่อกรองข้อมูลในเซิร์ฟเวอร์ ประหยัดแบนด์วิดท์และการประมวลผล

### 3. กำหนด Command Timeout

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

**ผลลัพธ์:** `ตารางจาก BigTable หากการสืบค้นเสร็จภายใน 1 ชั่วโมง`

ตั้ง CommandTimeout เป็น 1 ชั่วโมง (#duration ระบุ ชั่วโมง:นาที:วินาที) เหมาะสำหรับคำสั่ง SQL ที่ใช้เวลานาน

### 4. เชื่อมต่อ MySQL ผ่าน ODBC

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

**ผลลัพธ์:** `ตารางแสดงตารางทั้งหมดจากฐานข้อมูล MySQL`

ใช้ ODBC Driver ในการเชื่อมต่อ MySQL ระบุชื่อผู้ใช้และรหัสผ่าน

### 5. เชื่อมต่อ Access Database

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

**ผลลัพธ์:** `ตารางแสดงตารางทั้งหมดในไฟล์ Access`

ใช้ Access Database Engine เพื่อเชื่อมต่อไฟล์ .accdb ระบุเส้นทางแบบเต็มของไฟล์

## หมายเหตุเพิ่มเติม

- ใช้ [Query] option เพื่อกรองข้อมูลในแหล่งที่มา ลดปริมาณข้อมูลที่ต้องนำเข้า

- สำหรับ SQL Server ให้ใช้ Sql.Database แทน ซึ่งมี metadata ที่ดีกว่าและรองรับพารามิเตอร์

- ตั้ง CommandTimeout หากคาดว่า Query จะใช้เวลานาน เช่น สำหรับ JOIN ตารางใหญ่

- ใช้ #duration(hour, minute, second, millisecond) เพื่อระบุเวลา เช่น #duration(0,0,30,0) = 30 วินาที

- ทดสอบการเชื่อมต่อและ Query ในเครื่องแรก ก่อนนำข้อมูลเข้า Power Query

- หากต้องการ credential ปลอดภัย ใช้ Power BI Service Gateway หรือ Power Automate

## คำถามที่พบบ่อย

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

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

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

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

**Q: ใช้ [Query] ดีไหม**

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

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

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

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Learn: OleDb.DataSource](https://learn.microsoft.com/en-us/powerquery-m/oledb-datasource) _(official)_
- [Microsoft Learn: Power Query M Function Reference](https://learn.microsoft.com/en-us/powerquery-m/) _(official)_
- [Power Query How: OleDb.DataSource](https://powerquery.how/en/function/oledb-datasource) _(article)_

---

_Source: [https://www.thepexcel.com/functions/power-query/accessing-data-functions/oledb-datasource/](https://www.thepexcel.com/functions/power-query/accessing-data-functions/oledb-datasource/)_
