2015-08-25 5 views
0

Я пытаюсь запросить базу данных ACCESS с помощью R v3.0.3, и я запускаю повторяющиеся синтаксические ошибки SQL. Мой код выглядит следующим образом.Использование XML в SQL-запросе

library(RODBC) 
library(XML) 

# Access directory containing the corpus scripts and load all corpus documents  
dale1 <- "C:/Cerberus_Software_Prototype/TR_Corpus/2286newsML.xml")  
doc1 <- xmlInternalTreeParse(dale1)  
xattrs <- xpathApply(doc1, "//code[@code]", xmlGetAttr, "code")  
xmldf <- xmlToDataFrame(nodes = getNodeSet(doc1, "//code/code"))  
xattrs1 <- data.frame(xattrs) 

# Connect to Accessdb 
channel <- odbcConnectAccess("C:/Cerberus_Software_Prototype/R/Economics_data/Cerberus1.mdb") 

for (i in 1:6) { 
    # MODIFY SELECT OR ACTION QUERY TO MEET NEEDS, EVEN ADD PARAMS 
    querydf <- sqlQuery(channel, paste0("select All_codes.Description from All_codes 
             where All_codes.Code ='", xattrs$[i]Code, "'"))   
} 

close(channel) 

XML-содержится в структуре XML (только вставить соответствующую часть здесь) В этом примере есть шесть значений в пределах «кода кода =» блок

<code code="ECAT"> 
    <editdetail attribution="BIP Coding Group" action="confirmed" date="1996-08-20"/> 
</code> 

Может кто-нибудь помочь с этим ?

+0

Вы должны сказать людям, что синтаксические ошибки не только, что вы получите много из них. –

+0

Я только что закрыл R (32-разрядную версию) и снова попытался запустить скрипт. Он генерирует следующую ошибку. Ошибка в запросе querydf [i] <- sqlQuery (channel, paste0 ("select All_codes.Description from All_codes, где All_codes.Code = '", xattrs [i], "'")) Объектный запрос не найден. Этот код, похоже, работает только для определенного сеанса, как только мой компьютер выключен, он генерирует эту ошибку, и я не могу понять, почему это так. - Dale Addison 15 мин назад –

ответ

0

В вашем SQL заявления изменить каскадный переменную:

xattrs$[i]Code 

К

xattrs[i] 
+0

До сих пор, похоже, все работает, знает ли кто-нибудь, есть ли способ подсчитать количество элементов данных xml в каждом узле для использования в цикле for? –

+1

Конечно, используйте 'length (xattrs)'. Примите решение, если решение работает. – Parfait

Смежные вопросы