Thep Excel

Odbc.Queryดำเนินการค้นหาข้อมูลผ่าน ODBC

Odbc.Query ใช้สำหรับดำเนินการคำสั่ง SQL โดยตรงต่อฐานข้อมูล ODBC ใดๆ เช่น SQL Server, MySQL, PostgreSQL, Oracle และส่งคืนผลลัพธ์เป็นตาราง

fx
=Odbc.Query(connectionString, query, [options]) as table

ความนิยม5/10
ความยาก5/10
ประโยชน์5/10

อัปเดต 12 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
connectionString text or record สตริงการเชื่อมต่อ ODBC หรือระเบียน property-value pairs สำหรับเชื่อมต่อฐานข้อมูล
query text คำสั่ง SQL ที่ต้องการดำเนินการบนฐานข้อมูล (เช่น SELECT, UPDATE, DELETE)
[options]ไม่บังคับ record null ตัวเลือกเพิ่มเติมเพื่อกำหนดค่าพฤติกรรมการเชื่อมต่อ (ConnectionTimeout, CommandTimeout เป็นต้น)

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

Odbc.Query คือฟังก์ชัน Power Query ที่ช่วยให้คุณเชื่อมต่อกับฐานข้อมูลต่างๆ ผ่าน ODBC (Open Database Connectivity) และดำเนินการคำสั่ง SQL โดยตรง ไม่ว่าจะเป็น SELECT, UPDATE, DELETE หรืออื่นๆ บนฐานข้อมูลเหล่านั้น ผลลัพธ์จะส่งกลับมาเป็นตาราง Power Query ที่พร้อมใช้งาน

ที่เจ๋งของ Odbc.Query คือมันรองรับฐานข้อมูลเกือบทุกประเภท SQL Server, MySQL, PostgreSQL, Oracle, SQLite ฯลฯ ตัวคุณไม่ต้องใจเรื่องฟังก์ชัน SQL.Database หรือ Access.Database ที่มีจำเพาะเจาะจงแต่ละตัว แค่ใช้ Odbc.Query ตัวเดียวก็ทำงานได้ทั้งระบบปืนเก่า legacy database และระบบใหม่สุด modern database

ส่วนตัวผม 😎 ถ้าต้องเชื่อมต่อหลายประเภทฐานข้อมูล Odbc.Query เป็นตัวเลือกแรกของผม เพราะไม่ต้องคิดมาก ดำเนินการได้ตรงไปตรงมา และสามารถใช้ได้กับเกือบทุกฐานข้อมูลที่มี ODBC driver ติดตั้งไว้

Examples

ตัวอย่างพื้นฐาน – ดึงข้อมูลจากตารางโดยใช้ DSNlet ConnectionString = "dsn=MyDatabase", Query = "SELECT * FROM Customers", Result = Odbc.Query(ConnectionString, Query) in Result

ใช้ DSN (Data Source Name) ที่กำหนดไว้แล้วในระบบเพื่อเชื่อมต่อฐานข้อมูล แล้ว SELECT ข้อมูลทั้งหมดจากตาราง Customers

fx
let
ConnectionString = "dsn=MyDatabase",
Query = "SELECT * FROM Customers",
Result = Odbc.Query(ConnectionString, Query)
in
Result

ผลลัพธ์ตารางแสดงข้อมูลลูกค้าทั้งหมดจากตาราง Customers
ตัวอย่าง – กำหนด Connection String โดยตรงlet ConnectionString = "Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=SalesDB;Uid=admin;Pwd=password123", Query = "SELECT ProductID, ProductN…

กำหนด connection string อย่างสมบูรณ์พร้อม driver, server, database, username, password แล้วทำการค้นหาสินค้าที่มีราคามากกว่า 1000

fx
let
ConnectionString = "Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=SalesDB;Uid=admin;Pwd=password123",
Query = "SELECT ProductID, ProductName, Price FROM Products WHERE Price > 1000",
Result = Odbc.Query(ConnectionString, Query)
in
Result

ผลลัพธ์ตารางแสดงสินค้าที่มีราคามากกว่า 1000 หน่วยสกุลเงิน
ตัวอย่าง – ใช้ Connection Timeout และ Command Timeoutlet ConnectionString = "dsn=MyDatabase", Query = "SELECT * FROM LargeTable", Options = [ ConnectionTimeout = #duration(0, 0, 0, 30), CommandTimeout = #duration(…

ตั้งเวลารอการเชื่อมต่อ 30 วินาที และเวลารอการดำเนินการ SQL 5 นาที เพื่อหลีกเลี่ยงการค้างอย่างไม่สิ้นสุด

fx
let
ConnectionString = "dsn=MyDatabase",
Query = "SELECT * FROM LargeTable",
Options = [
ConnectionTimeout = #duration(0, 0, 0, 30),
CommandTimeout = #duration(0, 0, 5, 0)
],
Result = Odbc.Query(ConnectionString, Query, Options)
in
Result

ผลลัพธ์ตารางข้อมูลจาก LargeTable โดยมี timeout ที่กำหนดไว้
ตัวอย่าง – ใช้กับ JOIN หลายตารางlet ConnectionString = "dsn=CompanyDB", Query = "SELECT o.OrderID, o.OrderDate, c.CustomerName, p.ProductName FROM Orders o INNER JOIN Customers c ON o.Customer…

ใช้ JOIN เพื่อรวมข้อมูลจากหลายตารางในฐานข้อมูล และกรองข้อมูลตามวันที่ที่ระบุ

fx
let
ConnectionString = "dsn=CompanyDB",
Query = "SELECT o.OrderID, o.OrderDate, c.CustomerName, p.ProductName
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID
INNER JOIN Products p ON o.ProductID = p.ProductID
WHERE o.OrderDate >= '2024-01-01'",
Result = Odbc.Query(ConnectionString, Query)
in
Result

ผลลัพธ์ตารางแสดง OrderID, OrderDate, CustomerName, ProductName สำหรับออเดอร์ตั้งแต่ 2024-01-01 เป็นต้นไป
ตัวอย่าง – ใช้กับการแยกข้อมูลโดย GROUP BYlet ConnectionString = "dsn=SalesDB", Query = "SELECT CategoryID, SUM(Amount) AS TotalSales, COUNT(*) AS TransactionCount FROM Sales GROUP BY CategoryID ORDER B…

ใช้ GROUP BY เพื่อรวมข้อมูลขายตามประเภท และคำนวณยอดขายรวมและจำนวนธุรกรรม

fx
let
ConnectionString = "dsn=SalesDB",
Query = "SELECT CategoryID, SUM(Amount) AS TotalSales, COUNT(*) AS TransactionCount
FROM Sales
GROUP BY CategoryID
ORDER BY TotalSales DESC",
Result = Odbc.Query(ConnectionString, Query)
in
Result

ผลลัพธ์ตารางแสดง CategoryID, TotalSales, TransactionCount โดยจัดเรียงจากยอดขายสูงสุดไปต่ำสุด

FAQs

Odbc.Query ใช้ได้กับฐานข้อมูลประเภทไหนบ้าง?+

เกือบทุกฐานข้อมูลเลยครับ ตราบใจ ODBC driver เค้ารองรับ SQL Server, MySQL, PostgreSQL, Oracle, Microsoft Access, SQLite ฯลฯ ถ้าฐานข้อมูลไหนมี ODBC driver ก็ใช้ได้เหมือนกัน

ความแตกต่างระหว่าง Odbc.Query กับ Odbc.DataSource คืออะไร?+

Odbc.DataSource มันโชว์รายชื่อตารางและ views ที่อยู่ในฐานข้อมูลให้คุณเลือก แล้ว Odbc.Query ต่างหากครับ มันเอา SQL command ที่คุณเขียนไปรันตรงๆ แล้วส่งผลลัพธ์กลับมา ดังนั้นถ้าต้องคิด query ที่ซับซ้อน ใช้ Odbc.Query นะครับ

ต้องติดตั้ง ODBC driver หรือไม่?+

ต้องแน่นอนครับ ถ้าเครื่องของคุณไม่มี ODBC driver สำหรับฐานข้อมูลที่ต้องการ Odbc.Query มันจะไม่หาเจออยู่แล้ว หาอันที่เหมาะสมติดตั้งเสียก่อน

Connection timeout และ Command timeout ต่างกันอย่างไร?+

Connection timeout คือ 'นานเท่าไหร่ถึงจะยอมท้อว่าเชื่อมต่อไม่ได้' ส่วน Command timeout คือ 'นานเท่าไหร่ถึงจะยอมเพิ่มเติมว่า query นั่นค้างไป' เท่านั้นแหละ อันแรกเรื่องการเชื่อมต่อ อันหลังเรื่องการรันคำสั่ง

สามารถใช้ Odbc.Query สำหรับคำสั่ง INSERT, UPDATE, DELETE ได้หรือไม่?+

ได้นะครับ แต่จริงๆ ก็ไม่ค่อยเห็นใครใช้เพื่อแก้ไขข้อมูล มักจะใช้สำหรับดึงข้อมูล (SELECT) มากกว่า เพราะถ้าใช้ INSERT/UPDATE/DELETE ต้องมี permission พอ และต้องระวังไว้ด้วย ไม่อย่างนั้นขึ้นตัวที่ผิดไปเต็มฐานข้อมูล 😅

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ Odbc.Query จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้Odbc.QueryAccessing data functions
Accessing data functions (4)
Access.Database

Access.Database ใช้สำหรับการเชื่อมต่อกับไฟล์ฐานข้อมูล Microsoft Access (.mdb, .accdb) และดึงข้อมูลจากตาราต่างๆ

MySQL.Database

MySQL.Database เป็นฟังก์ชันตัวเชื่อมต่อ (connector) ที่ใช้ส่งข้อมูลจากฐานข้อมูล MySQL ไปยัง Power Query ช่วยให้คุณสามารถโหลดตารางและมุมมองจากเซิร์ฟเวอร์ MySQL ได้

Odbc.DataSource

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

Sql.Database

Sql.Database เป็นฟังก์ชันที่ใช้เชื่อมต่อกับฐานข้อมูล SQL Server แล้วดึงข้อมูลเข้ามาประมวลผลใน Power Query ได้เลยครับ
.
ฟังก์ชันนี้จะคืนค่าออกมาเป็น table ที่แสดงรายการของ tables, views และ stored functions ทั้งหมดที่มีในฐานข้อมูลที่เราระบุ ที่เจ๋งคือฟังก์ชันนี้รองรับการทำ query folding ซึ่งทำให้การประมวลผลข้อมูลเกิดขึ้นที่ SQL Server โดยตรง ได้ประสิทธิภาพสูงสุดและลดการใช้ memory ลงมาก
.
นอกจากนี้ยังมี options หลากหลายให้เราปรับแต่งการเชื่อมต่อได้ เช่น การกำหนด CommandTimeout สำหรับ query ที่ใช้เวลานาน การเขียน native SQL query เพื่อดึงข้อมูลแบบกำหนดเองเลย การทำ cross-database folding เพื่อทำงานข้ามหลายฐานข้อมูล และรองรับ authentication หลายรูปแบบด้วย ส่วนตัวผมใช้บ่อยมากเวลาทำงานกับข้อมูลขนาดใหญ่จาก SQL Server ครับ 😎

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่