Odbc sql
- Sao chép liên kết
- Chia sẻ với Facebook
- Chia sẻ với X
- Chia sẻ với Pinterest
- Chia sẻ với Linkedin
- Gửi bài qua Email
gửi email cho tác giả
Để test tag ODBC driver (ví dụ bạn đang dùng PostgreSQL + KEPServerEX / FUXA / app khác), bạn nên kiểm tra theo từng lớp từ thấp → cao để tránh lỗi. Mình hướng dẫn chuẩn theo thực tế bạn đang làm 👇
🧪 1. Test ODBC Driver (cơ bản nhất)
👉 Mục tiêu: kiểm tra driver có kết nối DB được không
Bước làm:
Mở ODBC Data Source Administrator (64-bit)
Vào tab System DSN → chọn DSN bạn đã tạo
Bấm Configure → Test Connection
✔ Nếu OK → driver + network + DB ổn
❌ Nếu lỗi → thường do:
Sai IP / port (PostgreSQL mặc định 5432)
Chưa mở remote DB
Sai user/password
🧪 2. Test bằng SQL (rất quan trọng)
👉 Dùng tool để test query trước khi đưa vào KEPware/FUXA
Bạn có thể dùng:
pgAdmin
DBeaver
Ví dụ query test:
SELECT
tkl.dbl_value AS value
FROM ts_kv_latest tkl
JOIN key_dictionary kd
ON tkl.key = kd.key_id
WHERE kd.key = '2_P_smart_home(W)'
LIMIT 1;
✔ Nếu ra giá trị → OK
❌ Không ra → sai:
tên key
cấu trúc bảng ThingsBoard
🧪 3. Test bằng ODBC Query Tool (trực tiếp ODBC)
👉 Chuẩn nhất để test driver
Dùng tool:
ODBC Test
Cách test:
Connect DSN
Paste query SQL
Execute
✔ Nếu trả về value → ODBC OK
❌ Nếu lỗi → do:
driver chưa đúng version (32/64 bit lệch)
DSN sai
🧪 4. Test trong KEPServerEX (nếu bạn dùng)
👉 Đây là bước bạn đang bị vướng nhiều nhất
Cấu hình đúng:
Channel: ODBC Client
Device: chọn DSN
Tag: dạng SQL Query
Ví dụ Tag:
SELECT dbl_value FROM ts_kv_latest LIMIT 1
✔ Nếu đọc được → tag OK
❌ Nếu lỗi:
Query không đúng format KEP (chỉ cho SELECT đơn giản)
DSN không tương thích 64-bit
🧪 5. Test trong FUXA (nếu bạn dùng Node.js)
👉 Nếu bạn đọc ODBC trong FUXA
Test nhanh bằng Node.js:
const odbc = require('odbc');
async function test() {
const conn = await odbc.connect('DSN=your_dsn');
const result = await conn.query('SELECT 1 as test');
console.log(result);
}
test();
✔ In ra { test: 1 } → OK
❌ Lỗi → driver / DSN
⚠️ Lỗi phổ biến (99% bạn sẽ gặp)
1. ❌ KEPware không đọc được nhưng Grafana đọc được
👉 Nguyên nhân:
Grafana dùng native PostgreSQL
KEPware dùng ODBC → yêu cầu chuẩn hơn
✔ Fix:
Dùng driver PostgreSQL Unicode
Kiểm tra 64-bit
2. ❌ PostgreSQL chưa mở remote
✔ Check file:
postgresql.conf → listen_addresses = '*'
pg_hba.conf → allow IP
3. ❌ Sai version ODBC
👉 Rất hay gặp:
KEPware = 64-bit → phải dùng ODBC 64-bit
✅ Quy trình chuẩn (bạn nên làm theo)
Test ODBC → OK
Test SQL → OK
Test bằng ODBC tool → OK
Đưa vào KEPware/FUXA
👉 Sai ở bước nào → fix ngay bước đó
👉 Nếu bạn muốn mình hỗ trợ sâu hơn
Bạn gửi mình:
Ảnh config ODBC
Query bạn đang dùng
Lỗi cụ thể KEPware/FUXA
Mình debug giúp bạn luôn (thường fix được ngay 👍)
Câu này mình nói thẳng luôn: KEPware đọc PostgreSQL của ThingsBoard được, nhưng KHÔNG phải cứ query chạy là KEP đọc được — vì ODBC của KEP có nhiều hạn chế hơn Grafana hay ThingsBoard.
Mình phân tích đúng “bệnh” bạn đang gặp 👇
❌ Vì sao KEPware không đọc được SQL ThingsBoard?
1. ⚠️ Query của ThingsBoard quá “phức tạp”
Query bạn đang dùng kiểu:
SELECT tkl.dbl_value
FROM ts_kv_latest tkl
JOIN key_dictionary kd
ON tkl.key = kd.key_id
WHERE kd.key = '2_P_smart_home(W)'
👉 KEPware ODBC Client không thích:
JOIN
alias (tkl, kd)
query nhiều bảng
✔ KEP chỉ thích:
SELECT column FROM table
👉 Đây là lỗi phổ biến nhất (90%)
2. ⚠️ PostgreSQL không phải “native” của KEP
KEPServerEX chỉ hỗ trợ ODBC chung
Không tối ưu riêng cho PostgreSQL
👉 Trong khi:
Grafana → native PostgreSQL → chạy ngon
KEP → qua ODBC → dễ lỗi
3. ⚠️ DSN / ODBC sai version (rất hay gặp)
👉 Nếu bạn cài:
PostgreSQL ODBC 32-bit ❌
KEPware là 64-bit ❌
→ KEP sẽ không đọc được
✔ Fix:
Cài đúng PostgreSQL Unicode(x64)
4. ⚠️ PostgreSQL chưa mở remote hoặc auth
👉 Dù Grafana đọc được, nhưng ODBC vẫn có thể fail
Check:
postgresql.conf → listen_addresses = '*'
pg_hba.conf → add IP KEPware
5. ⚠️ Query không trả về dạng “single value”
KEP tag yêu cầu:
👉 1 dòng – 1 cột
✔ OK:
SELECT dbl_value FROM ts_kv_latest LIMIT 1
❌ Không OK:
nhiều dòng
nhiều cột
JSON
✅ Cách fix chuẩn (đã test thực tế)
✔ Cách 1: Tạo VIEW trong PostgreSQL (khuyên dùng)
👉 Trong DB tạo view:
CREATE VIEW my_tag AS
SELECT dbl_value
FROM ts_kv_latest tkl
JOIN key_dictionary kd
ON tkl.key = kd.key_id
WHERE kd.key = '2_P_smart_home(W)';
👉 Sau đó trong KEP:
SELECT dbl_value FROM my_tag
✔ KEP đọc ngon ngay
✔ Cách 2: Query đơn giản hóa
Nếu không dùng VIEW:
SELECT dbl_value
FROM ts_kv_latest
WHERE key = 123
LIMIT 1
👉 (123 là key_id tra trong key_dictionary)
✔ Cách 3: Test ODBC riêng trước
Dùng:
DBeaver
hoặc ODBC test
👉 Nếu ODBC fail → KEP chắc chắn fail
✔ Cách 4: Kiểm tra driver
👉 Bắt buộc:
PostgreSQL ODBC x64
DSN System (không dùng User DSN)
🔥 Kết luận nhanh
👉 KEPware không đọc được vì:
❌ Query JOIN (chủ yếu)
❌ ODBC không tương thích
❌ Không phải native PostgreSQL
👍 Gợi ý thực tế cho bạn
Nếu bạn làm SCADA thật:
👉 Tốt nhất:
Dùng KEP đọc PLC → OPC UA
Không đọc SQL ThingsBoard trực tiếp
👉 Nếu vẫn muốn đọc:
✔ Dùng VIEW hoặc bảng trung gian
👉 Nếu bạn gửi mình:
Ảnh config KEP ODBC
Query bạn đang dùng
👉 Mình sửa đúng 100% cho bạn chạy luôn (case này mình gặp rất nhiều 👍

