使用sqliteodbc调用json_extract()时出现函数不存在错误
问题解决:ODBC驱动执行
json_extract报错 问题原因
你使用的ch-werner SQLite ODBC驱动对应的SQLite版本可能低于3.9.0(SQLite 3.9.0才正式内置JSON函数),或者驱动编译时未包含JSON扩展模块。而SQLite DB Browser使用的SQLite版本支持JSON函数,因此能正常运行语句。
解决步骤
1. 确认驱动的SQLite版本
在VBA代码中先执行版本查询,明确当前驱动对应的SQLite版本:
str_cnxn = "Driver={SQLite3 ODBC Driver};Database=" & db_path Dim Cnxn As New ADODB.Connection Dim rst As New ADODB.Recordset Cnxn.Open str_cnxn rst.Open "SELECT sqlite_version();", Cnxn, adOpenForwardOnly, adLockReadOnly Debug.Print "SQLite版本:" & rst(0) rst.Close
如果版本低于3.9.0,直接升级驱动即可。
2. 升级或更换ODBC驱动
- 若继续使用ch-werner的驱动,下载其最新版(新版通常默认内置JSON支持),或选择编译时包含JSON扩展的版本。
- 也可更换为SQLite官方维护的ODBC驱动,确保版本在3.9.0以上,这类驱动一般默认支持JSON函数。
3. 尝试加载JSON扩展(部分驱动支持)
如果驱动允许加载扩展,可在打开连接后执行加载命令:
str_cnxn = "Driver={SQLite3 ODBC Driver};Database=" & db_path & ";LoadExtension=1" Cnxn.Open str_cnxn ' 加载JSON扩展,注意json1.dll路径需匹配你的系统环境 Cnxn.Execute "SELECT load_extension('json1');" ' 之后执行原有查询 rst.Open "Select *,json_extract(pdf_links, '$.root') as root from book where book_id=10", Cnxn, adOpenForwardOnly, adLockReadOnly
内容的提问来源于stack exchange,提问作者hubaishan
相关产品推荐
相关产品推荐

