首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用SQL和ODBC连接将R数据帧保存到filemaker Pro数据库

无法使用SQL和ODBC连接将R数据帧保存到filemaker Pro数据库
EN

Stack Overflow用户
提问于 2017-09-06 13:26:31
回答 1查看 187关注 0票数 0

我有一个Filemaker 12关系数据库的肺癌患者接受手术治疗。由于一个病人可能在一个或多个手术中切除了一个或多个癌症,病人特征/人口统计数据在一个表(病人)中,他们所做的手术在另一个表(治疗)中由PatientID连接,而癌症特征在另一个表(病理)中被PatientID识别,但通过切除癌症的手术表的SurgeryID连接。

我希望将所有“内部连接”数据备份为一个平面文件,其中包含每个不同癌症的记录,以及每个患者的每次手术记录(因此,如果有多个癌症和/或手术,就会有多个相同的患者记录)。

因此,我进口了三个文件表病人,治疗,病理学使用:

代码语言:javascript
复制
con = odbcConnect("LC", uid = "uid", pwd = "pwd")
PatSurg <-sqlQuery(con, paste("SELECT * FROM Patient P INNER JOIN Treatment T ON P.PatientID = T.PatientID"))
PatPath <-sqlQuery(con, paste("SELECT * FROM Patient P INNER JOIN Pathology H ON P.PatientID = H.PatientID"))
Full <- merge(PatSurg, PatPath, by = intersect(names(PatSurg), names(PatPath)))
View(Full)

这成功地创建了数据框架(Full),就像我想要保存到一个空的、具有相同列名的Filemaker数据库中的平面文件一样,带有一个表Thoracic。

然后我想试试简单的说明:

代码语言:javascript
复制
sqlSave(con, Full, tablename = "Thoracic")

并被退回错误:

sqlSave中的错误(con,Full,tablename = "Thoracic"):表‘Thoracic’已经存在

没有被吓倒,我放下了桌子的名字,重新保存了它:

代码语言:javascript
复制
sqlDrop(con, "Thoracic", errors = FALSE)
sqlSave(con, Full, tablename = "Thoracic")

返回一个新错误:

sqlSave中的错误(con,Full,tablename = "Thoracic"):HY000 502 FileMaker (502)中的RODBC失败执行部分:字段数值验证测试失败

然后我想,也许我应该使用sqlQuery命令和INSERT,但不确定如何引用我的R数据框架作为SQL/ODBC的表达式。我试过:

代码语言:javascript
复制
sqlQuery(con, "INSERT INTO Thoracic ", Full)
sqlQuery(con, "INSERT INTO Thoracic VALUES", Full)

两人均返回:

错误的if (错误)返回(odbcGetErrMsg(通道))其他返回(不可见(Stat)):参数不能解释为逻辑附加:警告消息:在if (错误)返回(odbcGetErrMsg(通道))其他返回(不可见(Stat)):条件的长度>1,只有第一个元素将被使用

代码语言:javascript
复制
sqlAppendTable(con, "Thoracic", Full)

返回:

错误(函数(类、fdef、mtable):无法为函数‘sqlAppendTable’找到用于签名‘RODBC’的继承方法

代码语言:javascript
复制
sqlQuery(con, "INSERT INTO Thoracic VALUES Full")

返回:

1 "42000 8310 FileMaker Full 0001/(1:29):查询语法有错误。“2 "RODBC错误:无法SQLExecDirect‘插入胸值Full'”

如何在SQL查询中引用我的R数据框架"Full“。我看到的所有问题只与将数据从OBDC源导入到数据框架有关。这是最简单的一点!

EN

回答 1

Stack Overflow用户

发布于 2017-09-07 12:04:03

我找到了明显的解决办法

我安装了WriteXLS并将数据帧导出到XLSX文件,然后使用第一行作为列名导入:

代码语言:javascript
复制
install.packages("WriteXLS")
library(WriteXLS)
WriteXLS(Full, "SQL Backup.xlsx")

然后使用Filemaker的导入功能。包含某些字符的自由文本存在一些问题,所有日期都以yyyy格式返回,而不考虑原始格式。主要问题是,如果空闲文本包含分隔符,则可能会出现行内右帧移位,因此应该是最后一列。我刚刚更正了XLSX文件中的内容,并在PatientID、SurgeryID和DiagnosisID的基础上重新导入更新。

Addit:实际上,我发现导出作为.csv可以纠正这些小问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46076542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档