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

时间:2017-09-06 13:26:31

标签: sql r macos odbc filemaker

我有一个Filemaker Pro 12肺癌患者的关系数据库,接受手术治疗。因为一名患者可能在一次或多次手术中移除一种或多种癌症等,患者特征/人口统计数据在一个表格(患者)中,他们所拥有的手术在另一个表格(治疗)中由PatientID和癌症相关联特征在另一个表(病理学)中由PatientID识别,但通过手术台的SurgeryID与癌症被移除相关联。

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

因此我使用以下方法导入了3个Filemaker表患者,治疗,病理学

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)

这成功地创建了数据框(完整),就像我想要保存到一个空的现有Filemaker Pro数据库中的数据框一样,该数据库具有相同的列名和一个表Thoracic。

然后我想我会尝试简单的指令:

sqlSave(con, Full, tablename = "Thoracic")

并返回错误:

  

sqlSave中的错误(con,Full,tablename =“Thoracic”):table   '胸部'已经存在

没有被吓倒,我删掉了表名并重新保存了它:

sqlDrop(con, "Thoracic", errors = FALSE)
sqlSave(con, Full, tablename = "Thoracic")

返回了一个新错误:

  

sqlSave中的错误(con,Full,tablename =“Thoracic”):[RODBC]   更新HY000 502中的exec失败[FileMaker] [FileMaker](502):字段   数值验证测试失败

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

sqlQuery(con, "INSERT INTO Thoracic ", Full)
sqlQuery(con, "INSERT INTO Thoracic VALUES", Full)

两人都回复了:

  

if(errors)返回错误(odbcGetErrMsg(channel))else   return(不可见(stat)):参数不可解释为逻辑   另外:警告信息:在if(错误)   return(odbcGetErrMsg(channel))else return(invisible(stat)):.   条件的长度> 1,只使用第一个元素

sqlAppendTable(con, "Thoracic", Full)

返回:

  

(函数(classes,fdef,mtable)中的错误:无法找到   函数'sqlAppendTable'的继承方法用于签名'“RODBC”'

sqlQuery(con, "INSERT INTO Thoracic VALUES Full")

返回:

  

[1]“42000 8310 [FileMaker] [FileMaker] FQL0001 /(1:29):有一个   查询语法中的错误。“[2]”[RODBC]错误:不能   SQLExecDirect'插入胸部值满''

我应该如何在SQL查询中引用我的R数据框“Full”。我看到的所有问题仅涉及将数据从OBDC源导入数据帧。那是最简单的一点!

1 个答案:

答案 0 :(得分:0)

我找到了明显的解决方法

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

install.packages("WriteXLS")
library(WriteXLS)
WriteXLS(Full, "SQL Backup.xlsx")

然后使用Filemaker Pro的导入功能。 包含某些字符的自由文本存在一些问题,并且无论原始格式如何,日期都以yyyy-mm-dd格式返回。 主要问题是如果自由文本包含分隔符,则可能存在行内右帧移位,因此应该是最后一列。 我刚刚更正了XLSX文件中的那些并重新导入为基于PatientID,SurgeryID和DiagnosisID的更新。

Addit:实际上,我发现以.csv出口可以解决这些小问题。