2017-06-29 1 views
0

Je me rends compte qu'il existe de nombreuses questions similaires à propos de la connexion à RODBC avec brillant. Cependant, aucune de leurs solutions n'a fonctionné pour moi.RODBC ne peut pas se connecter en brillant - odbcValidChannel (canal) n'est pas VRAI

Je me suis connecté à mon serveur SQL en local sans problème, mais l'application brillante publiée ne peut pas se connecter.

Lorsque vous exécutez l'application que j'utilise localement:

myData <- reactive({ 

##connect to database 

myServer <- "***" 
myUser <- "***" 
myPassword <- "**" 
myDatabase <- "lto" 
myDriver <- "ODBC Driver 13 for SQL Server" 

connectionString <- paste0(
    "Driver=", myDriver, 
    ";Server=", myServer, 
    ";Database=", myDatabase, 
    ";Uid=", myUser, 
    ";Pwd=", myPassword) 

conn <- odbcDriverConnect(connectionString) 

dbhandle <- odbcDriverConnect(connectionString) 

query='SELECT [menu_item_id] 
      ,[primary_brand_id],[Q1],[Q2],[Q3] 
      ,[Q4],[Q5],[Q6],[Q7],[brand],[brand_parent] 
      ,[menu_item_name],[course_category],[day_part] 
      ,[description],[display_name],[display_with_brand] 
      ,[meal_part],[product_category],[reported] 
      ,[month],[year],[year_month],[period],[respondent_id] 
      ,[generation],[gender],[ethnicity],[income] 
      ,[eater_archetype],[survey_type] 
      FROM [dbo].[vw_menu_item_responses] 
      WHERE [month]=?' 

#month<-3 

#store results 
res <- sqlExecute(channel = dbhandle, 
        query = query, 
        data = list(input$month), 
        fetch = TRUE, 
        stringsAsFactors = FALSE) 

#close the connection 
odbcClose(dbhandle) 
#return results 
res 
}) 

output$table<- renderDataTable({ 
d<-myData() 
head(d) 
}) 

Lorsque vous essayez de publier l'application, je l'utilise:

myData <- reactive({ 

##connect to database 
myServer <- "***" 
myUser <- "***" 
myPassword <- "**" 
myDatabase <- "lto" 
myDriver <- "FreeTDS;TDS_Version=9.0" 

connectionString <- paste0(
    "Driver=", myDriver, 
    ";Server=", myServer, 
    ";Database=", myDatabase, 
    ";Uid=", myUser, 
    ";Pwd=", myPassword) 

conn <- odbcDriverConnect(connectionString) 

dbhandle <- odbcDriverConnect(connectionString) 


#build query 
#query = "SELECT * FROM [my_db].[dbo].[my_table] where [CATEGORY] = '1070'" 
#query = "SELECT * FROM [my_db].[dbo].[my_table] where [CATEGORY] = ?" 

query='SELECT [menu_item_id] 
      ,[primary_brand_id],[Q1],[Q2],[Q3] 
      ,[Q4],[Q5],[Q6],[Q7],[brand],[brand_parent] 
      ,[menu_item_name],[course_category],[day_part] 
      ,[description],[display_name],[display_with_brand] 
      ,[meal_part],[product_category],[reported] 
      ,[month],[year],[year_month],[period],[respondent_id] 
      ,[generation],[gender],[ethnicity],[income] 
      ,[eater_archetype],[survey_type] 
      FROM [dbo].[vw_menu_item_responses] 
      WHERE [month]=?' 

#month<-3 

#store results 
res <- sqlExecute(channel = dbhandle, 
        query = query, 
        data = list(input$month), 
        fetch = TRUE, 
        stringsAsFactors = FALSE) 

#close the connection 
odbcClose(dbhandle) 
#return results 
res 
    }) 

Remarque J'ai aussi essayé le différentes versions de TDS (7.0 et 8.0). En outre, le problème ne réside pas avec ma variable $ mois d'entrée parce que j'ai essayé de le mettre à une constante et cela ne fonctionne toujours pas.

TOUTES les suggestions sont les bienvenues. S'il vous plaît aider.

évidemment aussi mon code d'utilisateur, mot de passe, et le serveur ne sont pas réellement astérisques, mais des informations confidentielles, je ne veux pas partager :)

Répondre

2

répondre à ma propre question:

je avais besoin d'inclure le port de ma chaîne de connexion !!

je changé:

"; Base de données =", myDatabase,

à:

"; Port = 1433; Base de données =", myDatabase,

aussi ma solution finale utilisée TDS_Version 7.0 et je ne suis pas sûr si cela fait partie du problème.