Thep Excel

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

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

=Odbc.Query(connectionString as any, query as text, optional 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

=Odbc.Query(connectionString as any, query as text, optional options as nullable record) as table

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

Examples

ตัวอย่างพื้นฐาน – ดึงข้อมูลจากตารางโดยใช้ DSN
let ConnectionString = "dsn=MyDatabase", Query = "SELECT * FROM Customers", Result = Odbc.Query(ConnectionString, Query) in Result
ใช้ DSN (Data Source Name) ที่กำหนดไว้แล้วในระบบเพื่อเชื่อมต่อฐานข้อมูล แล้ว SELECT ข้อมูลทั้งหมดจากตาราง Customers
Power Query Formula:

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

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
Power Query Formula:

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

Result:

ตารางแสดงสินค้าที่มีราคามากกว่า 1000 หน่วยสกุลเงิน

ตัวอย่าง – ใช้ Connection Timeout และ Command Timeout
let ConnectionString = "dsn=MyDatabase", Query = "SELECT * FROM LargeTable", Options = [ ConnectionTimeout = #duration(0, 0, 0, 30), CommandTimeout = #duration(…
ตั้งเวลารอการเชื่อมต่อ 30 วินาที และเวลารอการดำเนินการ SQL 5 นาที เพื่อหลีกเลี่ยงการค้างอย่างไม่สิ้นสุด
Power Query Formula:

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

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 เพื่อรวมข้อมูลจากหลายตารางในฐานข้อมูล และกรองข้อมูลตามวันที่ที่ระบุ
Power Query Formula:

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

Result:

ตารางแสดง OrderID, OrderDate, CustomerName, ProductName สำหรับออเดอร์ตั้งแต่ 2024-01-01 เป็นต้นไป

ตัวอย่าง – ใช้กับการแยกข้อมูลโดย GROUP BY
let ConnectionString = "dsn=SalesDB", Query = "SELECT CategoryID, SUM(Amount) AS TotalSales, COUNT(*) AS TransactionCount FROM Sales GROUP BY CategoryID ORDER B…
ใช้ GROUP BY เพื่อรวมข้อมูลขายตามประเภท และคำนวณยอดขายรวมและจำนวนธุรกรรม
Power Query Formula:

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

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

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 ติดตั้งไว้

Leave a Reply

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