我有一个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源导入数据帧。那是最简单的一点!
答案 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出口可以解决这些小问题。