2016-06-09 4 views
1

Я не понимаю ошибку, которая появляется в моем SQL-запросе. Если я выбираю в SQL Select * -> он работает нормально, и я получаю таблицу, однако, если я выбрать любой колонки/с, что дает мне ошибку:Ошибка SQL Query при выборе отдельных столбцов

Error in $<-.data.frame (*tmp* , "PROBE", value = structure(integer(0), .Label = character(0), class = "factor")) :
replacement has 0 rows, data has 1427

Вот мой SQL код:

if(input$filter == 1){ 
     sqlOutput <- reactive({ 
      sqlInput <- paste("select * from DWH.PROBE where DWH.PROBE.Nr =",paste0("'",d(),"'"), "And DWH.PROBE.AB BETWEEN",input$abmfrom, "AND",input$abmto,"ORDER BY Datum asc") 
      print(sqlInput) 
      dbGetQuery(con$cc, sqlInput) 
     }) 
     }else{ 
     sqlOutput <- reactive({ 
      sqlInput <- paste("select * from DWH.PROBE where DWH.PROBE.S BETWEEN",d2(), "AND",input$sgehalt2, "And DWH.PROBE.AB BETWEEN",input$abmfrom2, "AND",input$abmto2,"ORDER BY Datum asc") 
      dbGetQuery(con$cc, sqlInput) 
     })} 

А если я просто добавить к этим SQL запросов

select DWH.PROBE.S, DWH.PROBE.AB.. from DWH.PROBE 

Тогда приходит выше упомянутой ошибки.

Кроме того я должен сказать, если я буду использовать этот SQL-запрос в простом коде:

rs <- dbSendQuery(con, paste("select DWH.PROBE.AB, DWH.PROBE.S from DWH.PROBE where DWH.PROBE.Nr = '50' And DWH.PROBE.AB BETWEEN 40 AND 50 ORDER BY Datum asc")) 
data <- fetch(rs) 

Это дает мне результаты ...

Есть идеи?

[EDIT *, как мой вопрос не является дубликатом]

Вопрос размещен здесь: http://stackoverflow.com/questions/32048072/how-to-pass-input-variable-to-sql-statement-in-r-shiny на самом деле не имеет ничего общего с моей темой. Как мы можем видеть ошибку в этом посте:

Error in .getReactiveEnvironment()$currentContext() : Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

не имеют проблем с передачей входной переменной в SQL Statement и, кроме того, если вы можете увидеть в моем SQL: Запросов в реактивном контексте !:

sqlOutput <- reactive({... 

решение для выше вопрос был:

поставить SQL-запрос в реактивном контексте который не вещь в моем случае

[EDIT 2] -> биты, связанные с sqlOutput()

Вот немного кода, связанного с sqlOutput(), которые я использую в моей блестящей App (на данный момент это единственный бит, потому что я застрял SQL Query)

output$tabelle <- DT::renderDataTable({ 
    data <- sqlOutput() 
    data$PROBE <- as.factor(as.character(data$PROBE)) 
    data 
    }, rownames=TRUE, filter="top", class = 'cell-border stripe', 
         options = list(pageLength = 100, lengthMenu=c(100,200,500), columnDefs = list(list(width = '200px', targets = "_all"),list(bSortable = FALSE, targets = "_all")))) 

Благодаря

+0

Связанное сообщение: http://stackoverflow.com/questions/29814912 – zx8754

+0

Возможный дубликат [Как передать входную переменную в оператор SQL в R shiny?] (Http://stackoverflow.com/questions/32048072/how- to-pass-input-variable-to-sql-statement-in-r-shiny) –

+0

Его не дублирует @Pork Chop, если вы заметили, что мой SQL-запрос находится в реактивном контексте *, так что это не проблема –

ответ

0

Ошибка не относится к SQL заявления, однако, попробуйте изменить код ниже:

sqlOutput <- reactive({ 
    if(input$filter == 1){ 
    sqlInput <- paste("select * from DWH.PROBE where DWH.PROBE.Nr =",paste0("'",d(),"'"), "And DWH.PROBE.AB BETWEEN",input$abmfrom, "AND",input$abmto,"ORDER BY Datum asc") 
    } else { 
    sqlInput <- paste("select * from DWH.PROBE where DWH.PROBE.S BETWEEN",d2(), "AND",input$sgehalt2, "And DWH.PROBE.AB BETWEEN",input$abmfrom2, "AND",input$abmto2,"ORDER BY Datum asc") 
    } 
    dbGetQuery(con$cc, sqlInput) 
}) 
+0

если проблема не в SQL, то где это возможно, как простой SQL-запрос, который я опубликовал в конце, дает желаемую таблицу ... –

+0

@Malvina_a мы не можем сказать, добавим ваш полный код (по крайней мере, биты, где он связан с этим выходом SQL) – zx8754

+0

Я только что редактировал мой вопрос, и я вставил туда немного моего код, в котором используется 'sqlOutput()' –