R语言如何通过RODBC删除Access数据库存储的已有查询(非表)
问题原因
sqlDrop() 本身是为删除表对象设计的函数,执行前会强制校验传入的名称是否对应已存在的表。Access中存储的查询不属于表对象,自然通不过校验,直接抛出「表不存在」的错误,根本不会走到删除逻辑。
可行方案
不用依赖sqlDrop(),Access原生SQL支持通过DDL语句直接删除存储查询,你只要用sqlQuery()把删除语句传给数据库执行就行,能完全绕开sqlDrop自带的表类型校验:
# 数据库连接逻辑和原有写法完全一致 db <- odbcConnectAccess(choose.files(caption="select database")) # 替换成你要删除的查询名称即可,名称含特殊字符/空格时记得用方括号包裹 sqlQuery(db, "DROP VIEW existing_dummy_query") # 操作结束后关闭连接 odbcClose(db)
语句执行成功时sqlQuery会返回空字符串,若返回报错信息可以根据提示调整语法即可。
补充说明:如果你要删除的是动作类查询(比如更新查询、追加查询、删除查询这类带写操作逻辑的查询),执行
DROP VIEW报错的话,把语句替换为DROP PROCEDURE existing_dummy_query即可——Access会把这类动作查询识别为存储过程对象,对应不同的删除语法。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

