2017-09-06 77 views
0

我有一個Filemaker Pro 12關係數據庫,用於接受手術治療的肺癌患者。由於一名患者可能在一次或多次手術中切除了一個或多個癌症等,因此患者特徵/人口統計數據在一張表格(患者)中,他們手術的患者在另一張表格(治療)中,患者ID和癌症特徵在由PatientID確定的另一個表格(病理學)中,但是通過手術表的SurgeryID與癌症被去除相關聯。無法使用SQL和ODBC連接將R數據幀保存到filemaker Pro數據庫

我想將所有「內部加入」數據備份爲一個平面文件,每個不同癌症的記錄以及每位患者的每項手術(因此如果患者有多個癌症和/或操作)。

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:

我已經使用因此進口3個的Filemaker表病人,治療,病理學Pro數據庫與表胸相同的列名稱。

我當時想我會嘗試簡單的指令:

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

,並返回錯誤:

Error in sqlSave(con, Full, tablename = "Thoracic") : table ‘Thoracic’ already exists

氣餒,我放棄了表名,並重新保存它:

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

其中返回了一個新的錯誤:

Error in sqlSave(con, Full, tablename = "Thoracic") : [RODBC] Failed exec in Update HY000 502 [FileMaker][FileMaker] (502): Field failed numeric value validation test

然後我想,也許我應該使用sqlQuery命令和INSERT,但不知道如何在SQL/ODBC表達式時引用我的R數據框。我想:

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

兩個返回:

Error in if (errors) return(odbcGetErrMsg(channel)) else return(invisible(stat)) : argument is not interpretable as logical In addition: Warning message: In if (errors) return(odbcGetErrMsg(channel)) else return(invisible(stat)) : the condition has length > 1 and only the first element will be used

sqlAppendTable(con, "Thoracic", Full) 

返回:

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘sqlAppendTable’ for signature ‘"RODBC"’

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

返回:

[1] "42000 8310 [FileMaker][FileMaker] FQL0001/(1:29): There is an error in the syntax of the query." [2] "[RODBC] ERROR: Could not SQLExecDirect 'INSERT INTO Thoracic VALUES Full'"

我應該如何在SQL查詢中引用我的R數據框「Full」。我所看到的所有問題都只涉及將數據從OBDC源導入數據框。這是最簡單的一點!

回答

0

我已經發現了明顯的解決方法

我已經安裝WriteXLS和導出的數據幀到XLSX文件,然後簡單地使用第一行作爲列名的輸入:

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

然後使用導入Filemaker Pro的功能。 無論原始格式如何,包含某些字符的自由文本都存在一些問題,並且所有返回的格式都是yyyy-mm-dd格式。 主要問題是,如果自由文本包含分隔符,則可能會出現行內右移幀,因此應該是最後一列。 我剛糾正XLSX文件中的那些文件,並根據PatientID,SurgeryID和DiagnosisID重新導入爲更新。

Addit:實際上,我發現導出爲.csv可以糾正這些小問題。

相關問題