.mdb/.accdb) 隨 Office 普及,無需單獨安裝數據庫服務器。
// 原 MySQL 連接串
SQLCHAR ConnStrIn[MAXBUFLEN] =
"DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=test;CharSet=gbk;";
// 改為 Access (`.mdb`) 連接串
SQLCHAR ConnStrIn[MAXBUFLEN] =
"Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\mydatabase.mdb;Uid=Admin;Pwd=;CharSet=gbk;";
Driver:Access 驅動名稱(系統 DSN 或驅動名)。Dbq:數據庫文件絕對路徑(雙反斜杠轉義)。Uid/Pwd:Access 默認 Admin 無密碼。SQLAllocHandle(SQL_HANDLE_ENV, ...)SQLSetEnvAttr(..., SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3)SQLAllocHandle(SQL_HANDLE_DBC, ...)SQLDriverConnect(..., ConnStrIn, ...)SQLAllocHandle(SQL_HANDLE_STMT, ...)
// 插入示例
SQLPrepare(hstmt, (SQLCHAR*)"INSERT INTO T_Person(FAge, FName) VALUES(20, 'kider')", SQL_NTS);
SQLExecute(hstmt);
SQLEndTran(SQL_COMMIT)SQLFreeHandle。C:\mydatabase.mdb (Access 2000/2003 格式兼容性最好)。T_Person,字段 FAge (Number), FName (Text)。odbc32.lib (Windows SDK) 或 -lodbc (Linux unixODBC)。| 現象 | 原因 | 解決 |
|---|---|---|
| SQL_ERROR 連接失敗 | 驅動名錯誤/路徑錯誤/位數不匹配 | ODBC 數據源管理器測試 DSN;確認程序與驅動同為 32/64 位 |
| 表不存在 | SQL 中表名/字段名拼寫錯誤 | Access 中打開表核對名稱,注意大小寫 |
| 中文亂碼 | 字符集不匹配 | 連接串加 CharSet=gbk 或 utf-8,配合 SQLSetConnectAttr |
// SQL Server
"Driver={SQL Server};Server=127.0.0.1;Database=test;Uid=sa;Pwd=123;"
// PostgreSQL
"Driver={PostgreSQL Unicode};Server=127.0.0.1;Port=5432;Database=test;Uid=postgres;Pwd=123;"
// SQLite (需 ODBC 驅動)
"Driver={SQLite3 ODBC Driver};Database=C:\\data.db;"
ODBC 統一 API 讓數據庫切換極低成本,適合輕量級桌面應用、嵌入式設備數據存儲。