在Access中执行STGeomFromText时提示‘查询表达式缺少运算符’错误
解决Access VBA调用SQL Server Geography函数报错的问题
你的问题根源在于**CurrentDb.OpenRecordset是通过Access的Jet/ACE引擎解析SQL语句**,而这个本地引擎不支持SQL Server专属的geography空间数据类型和STGeomFromText方法,所以会抛出语法错误。而在SSMS中执行时,SQL是直接发送给SQL Server引擎处理,自然能正常运行。
下面提供两种可行的解决方案:
方案一:使用ADODB直接连接SQL Server
绕过Access的本地SQL解析,直接通过ADODB连接执行SQL Server原生语句:
Dim conn As Object Dim rs As Object Dim GC As String ' 创建ADODB连接对象(后期绑定,无需额外引用) Set conn = CreateObject("ADODB.Connection") ' 替换为你的SQL Server连接信息 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=你的服务器地址;Initial Catalog=目标数据库名;User ID=账号;Password=密码;" conn.Open ' 执行SQL查询 Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT geography::STGeomFromText('POINT(-95.3098 29.8131)', 4326) AS GeoResult", conn ' 获取查询结果 If Not rs.EOF Then GC = rs("GeoResult").Value End If ' 释放资源 rs.Close conn.Close Set rs = Nothing Set conn = Nothing
如果习惯早期绑定,可以在VBA编辑器的「工具」→「引用」中勾选「Microsoft ActiveX Data Objects x.x Library」,然后将代码中的Object替换为ADODB.Connection和ADODB.Recordset。
方案二:使用Access传递查询
创建Access传递查询,让SQL直接发送到SQL Server执行:
Dim qdf As QueryDef Dim rs As Recordset Dim GC As String ' 创建临时传递查询 Set qdf = CurrentDb.CreateQueryDef("") ' 设置SQL Server连接字符串 qdf.Connect = "ODBC;Driver={SQL Server};Server=你的服务器地址;Database=目标数据库名;UID=账号;PWD=密码;" ' 写入SQL Server原生语句 qdf.SQL = "SELECT geography::STGeomFromText('POINT(-95.3098 29.8131)', 4326)" qdf.ReturnsRecords = True ' 指定查询返回记录 ' 打开记录集获取结果 Set rs = qdf.OpenRecordset() If Not rs.EOF Then GC = rs(0).Value End If ' 清理资源 rs.Close Set rs = Nothing Set qdf = Nothing
内容的提问来源于stack exchange,提问作者ouch
相关产品推荐
相关产品推荐

