---
title: Odbc.DataSource – เชื่อมต่อแหล่งข้อมูล ODBC
url: https://www.thepexcel.com/functions/power-query/accessing-data-functions/odbc-datasource/
type: function-explainer
program: Power Query
syntax: "= Odbc.DataSource(connectionString as any, optional options as nullable record) as table"
date: 2025-12-12
updated: 2025-12-25
scores:
  popularity: 6
  difficulty: 5
  usefulness: 6
---

# Odbc.DataSource – เชื่อมต่อแหล่งข้อมูล ODBC

> Odbc.DataSource เชื่อมต่อแหล่งข้อมูล ODBC และดึงรายชื่อตารางพร้อมวิว ช่วยให้คุณเข้าถึงฐานข้อมูลจากเค

## คำอธิบาย

Odbc.DataSource เชื่อมต่อแหล่งข้อมูล ODBC และดึงรายชื่อตารางพร้อมวิว ช่วยให้คุณเข้าถึงฐานข้อมูลจากเครื่อง ODBC-compliant โดยไม่ต้องใช้ SQL Server Connection โดยตรง

## Syntax

```excel
= Odbc.DataSource(connectionString as any, optional options as nullable record) as table
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| connectionString | Yes | Text or Record |  | Connection string สำหรับแหล่งข้อมูล ODBC เช่น 'dsn=MyDatabase' หรือ record ที่มี property-value pairs (Driver, Server, Database, Uid, Pwd) |
| options | No | Record | null | ตัวเลือกการตั้งค่าเพิ่มเติม เช่น CreateNavigationProperties, HierarchicalNavigation, ConnectionTimeout, CommandTimeout, SqlCompatibleWindowsAuth |

## ตัวอย่าง

### 1. เชื่อมต่อแหล่งข้อมูล ODBC ด้วย DSN

```excel
= Odbc.DataSource("dsn=MyDatabase")
```

**ผลลัพธ์:** `Table ที่มีรายชื่อตารางและวิวทั้งหมดจากแหล่งข้อมูล ODBC`

เชื่อมต่อไปยัง ODBC data source ที่มีชื่อ 'MyDatabase' และคืนค่าเป็น table ของตารางทั้งหมด ถ้า DSN ลงทะเบียนแล้วในระบบ ก็เพียงพอ

### 2. เชื่อมต่อพร้อมตั้งค่า timeout

```excel
let
    Options = [CommandTimeout = Duration.FromSeconds(30), ConnectionTimeout = Duration.FromSeconds(20)],
    DataSource = Odbc.DataSource("dsn=MyDatabase", Options),
    SelectedTable = DataSource{[Name = "Customers"]}
in
    SelectedTable
```

**ผลลัพธ์:** `ข้อมูลจากตาราง Customers พร้อม timeout control ที่กำหนดเอง`

ตั้งค่า command timeout เป็น 30 วินาทีและ connection timeout เป็น 20 วินาที จากนั้นเลือกตาราง Customers จากผลลัพธ์ CommandTimeout ใช้สำหรับระยะเวลาการทำงาน query ส่วน ConnectionTimeout คือระยะเวลารอการเชื่อมต่อ

### 3. ใช้ Record สำหรับ connection string

```excel
let
    ConnInfo = [Driver = "MySQL ODBC 8.0 Driver", Server = "localhost", Database = "MyDB", Uid = "user", Pwd = "password"],
    DataSource = Odbc.DataSource(ConnInfo),
    SalesTable = DataSource{[Name = "Sales"]}
in
    SalesTable
```

**ผลลัพธ์:** `ข้อมูลจากตาราง Sales โดยใช้ ODBC driver ของ MySQL`

ใช้ record เพื่อส่งข้อมูลการเชื่อมต่อแบบละเอียด แล้วเลือกตาราง Sales การใช้ record format นี้ปลอดภัยกว่า string เพราะสามารถเก็บข้อมูลไวพจน์ได้

### 4. ใช้ HierarchicalNavigation เมื่อมีตารางเยอะ

```excel
let
    Options = [HierarchicalNavigation = true, CreateNavigationProperties = true],
    DataSource = Odbc.DataSource("dsn=CorpDatabase", Options)
in
    DataSource
```

**ผลลัพธ์:** `Table ที่จัดกลุ่มตารางตามชื่อ schema เรียบร้อย`

เมื่องานมีตารางมากขึ้น ตั้ง HierarchicalNavigation เป็น true เพื่อให้แสดงกลุ่มตามชื่อ schema ทำให้หาตารางได้ง่ายขึ้น

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

- ผมแนะนำให้ HierarchicalNavigation = true เมื่องานมีตารางเยอะ ต้องจัดกลุ่มตาม schema เหมือยจะเห็นชัด

- ปรับ timeout ให้พอดี - ถ้า network ช้า ตั้ง ConnectionTimeout สูงหน่อย ถ้า query ยาว ตั้ง CommandTimeout สูง ส่วนตัวผม ใส่ 30-60 วินาทีให้เซฟเซฟ

- ใช้ Record format (ไม่ใช่ string) สำหรับ connectionString ถ้าต้องส่ง username/password หรือ server details - มันเป็นวิธีที่ปลอดภัยกว่า และให้ดูการตั้งค่าชัดเจน

- ไม่เพิ่งทำ transform อื่นๆ ก่อน เลือกตารางด้วย DataSource{[Name = "TableName"]} ก่อน จะชัวร์ว่าได้ตารางที่ต้องการ

- ถ้ากลัวปัญหา credentials ให้เก็บใน parameter หรือ config ไม่อยากเห็นรหัสผ่านซ้ำๆ ในโค้ด

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

**Q: Odbc.DataSource กับ Sql.Database ต่างกันยังไง**

คิดแบบนี้ - Odbc.DataSource เป็นตัวช่วยที่เข้ากับได้หลายระบบ (MySQL, PostgreSQL, Excel Files ผ่าน ODBC) ส่วน Sql.Database เนี่ย มันจบจำเพาะแค่ SQL Server ตรงๆ ผมแนะนำให้ใช้ Odbc.DataSource ถ้าฐานข้อมูลไม่ใช่ SQL Server แต่ถ้าแน่ใจว่าเป็น SQL Server แล้ว Sql.Database จะเร็วกว่า

**Q: ConnectionTimeout vs CommandTimeout อะไรต่างกัน**

ConnectionTimeout เนี่ยคือ 'นานไหนถึงจะยอมแพ้ว่าเชื่อมต่อไม่ได้' (ค่าเริ่มต้น 15 วินาที) CommandTimeout เป็น 'นานไหนถึงจะยอมแพ้ว่า query มันแล่นไม่จบ' (ค่าเริ่มต้น 10 นาที) สองตัวนี้ต้องคำนึงถึง network condition ของคุณ ผมแนะนำให้ปรับ CommandTimeout สูงขึ้นถ้า query เป็นแบบหนัก

**Q: ต้อง install ODBC driver ไหม**

แน่นอนครับ ต้องติดตั้ง ODBC driver ที่เข้ากับฐานข้อมูลของคุณ MySQL ODBC, PostgreSQL ODBC, ACCESS ODBC - แบบนี้ เครื่องของคุณต้องมีมัน ไม่งั้น Power Query จะไม่เห็น data source

**Q: CreateNavigationProperties มันคืออะไร**

นี่ตัวเลือกที่ช่วยให้ Power Query แสดงตารางและวิวเป็นนวิเกชันที่เข้าใจง่าย (ค่าเริ่มต้น true) ปกติจะตั้งเป็น true แล้ว ถ้าตั้ง false ก็ต้องหาตารางแบบ manual มากกว่า ผมไม่ค่อยปิดตัวนี้หรอก

**Q: SqlCompatibleWindowsAuth ทำไมต้องใช้**

ตัวนี้บอก Power Query ว่าให้ใช้วิธี Windows authentication ที่เข้ากับ SQL Server (ค่าเริ่มต้น true) ถ้างานของคุณใช้ Windows credentials ก็ปล่อยให้ true ไป

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

- [Microsoft Learn: Odbc.DataSource](https://learn.microsoft.com/en-us/powerquery-m/odbc-datasource) _(official)_
- [Microsoft Learn: Power Query ODBC Connector](https://learn.microsoft.com/en-us/power-query/connectors/odbc) _(official)_
- [ODBC Connection Strings Reference](https://www.connectionstrings.com/) _(article)_

---

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