使用RJDBC包,SQL查询可在Access中运行,但不能在R中运行

yqkkidmi  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(151)

我一直在一整天试图解决这个问题。我有一个Access数据库,我想使用JDBC连接从R更新一些数据。如果我在Access中的SQL查询编辑器中执行它,则UPDATE查询可以完美地工作,但不能从R工作,我不知道为什么。这是我的代码:

library(devtools)
library(DBI)
library(dplyr)
library(rJava)
library(RJDBC)

setwd("mypath")

access_driver_file_name <- "Access_JDBC42.jar"
access_driver_class <- "com.hxtt.sql.access.AccessDriver"
access_data_file <- "my_database.accdb"    #poner aqui el nombre de la base 1
access_jdbc_url <- paste("jdbc:access:/", getwd(), "\\", access_data_file, sep="") 
access_jdbc_driver <- JDBC(driverClass=access_driver_class, classPath=paste(getwd(), "\\", access_driver_file_name, sep=""))

con <- dbConnect(access_jdbc_driver, access_jdbc_url)
dbListTables(con)#this work perfectly

dbSendUpdate(con, 'UPDATE TableName SET TableName.Field = "Casa"
WHERE (([TableName].[Field]="Oficina"));')

If I copy UPDATE TableName SET TableName.Field = "Casa" WHERE (([TableName].[Field]="Oficina")); and paste it in Access the query works, but R returns:

Error in .local(conn, statement, ...) : 
  execute JDBC update query failed in dbSendUpdate
  JDBC ERROR: Syntax error:  Stopped parse at .(id21)
  Statement: UPDATE TableName SET TableName.Field = "Casa"
WHERE (([TableName].[Field]="Oficina"));

我用dbSendQuery和dbGetQuery做了同样的尝试,但总是得到同样的错误。有人能帮助我吗?先谢谢你!
我用dbSendQuery和dbGetQuery做了同样的尝试,总是得到同样的错误。

nnvyjq4y

nnvyjq4y1#

最后我找到了解决方案。我改变了包来连接Access。现在我使用RODBC包。首先我需要安装ODBC驱动程序到Access,然后我运行下面的代码并执行我的UPDATE查询没有问题:

require(RODBC)
channel=odbcConnectAccess2007("my_path/my_data_base.accdb")
sqlQuery(channel, "UPDATE Table_Name SET Table_Name.column = 'Casa'
WHERE (([Table_Name].[Column]='Oficina'));")
odbcClose(channel) #this is to desconect the DB

相关问题