Функция, использующая диалоговые окна, неправильно выполняющие ложные утверждения - PullRequest
0 голосов
/ 07 января 2020

Я пишу функцию, которая подключит сеанс R к одной из нескольких Oracle баз данных. В рамках этой функции пользователь должен всегда вводить свое имя пользователя и пароль, но может не вводить имя хоста / номер порта в зависимости от того, запрограммированы ли эти параметры в функцию. , Если хост / порт не включен в функцию, пользователю будет предложено ввести эти параметры вручную.

По какой-то причине моя функция ошибочно выполняет ложные операторы и заставляет пользователя вводить имя хоста. / номера портов, несмотря на то, что они используют предварительно запрограммированную базу данных. У кого-нибудь есть идеи, почему это происходит? Сводить меня с ума прямо сейчас ...

Пример кода приведен ниже. По какой-то причине, only тот, который выполняется правильно, является последней базой данных (DB4).

library(svDialogs)
library(getPass)

db_function <- function(database) {
  login_1 <- dlg_input(message = paste("Input", database, "Username:"), Sys.info()["login_1"])$res
  login_2 <- getPass(msg = paste("Input", database, "Password:"))
  if(database == "DB1") {
    host <- "host1"
    port <- 9999
  }
  if(database == "DB2") {
    host <- "host2"
    port <- 9999
  }
  if(database == "DB3") {
    host <- "host3"
    port <- 9999
  }
  if(database == "DB4") {
    host <- "host4"
    port <- 9999
  }
  else {
    host <- dlg_input(message = paste("Input", database, "Host Name:"),
                      Sys.info()["host"])$res
    port <- dlg_input(message = paste("Input", database, "Port Number:"),
                      Sys.info()["port"])$res
  }
  connect_string <- paste(
    "(DESCRIPTION=",
    "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
    "(CONNECT_DATA=(SERVICE_NAME=", database, ")))", sep = "")
}

## executes incorrectly (programmed but still prompted to input manually)    
db_function("DB3")

## executes correctly (programmed and not prompted to input manually)
db_function("DB4")

## executes correctly (not programmed, so prompted to input manually)
db_function("DB5")

Большое спасибо за любую помощь, которую кто-либо может предложить в этом!

1 Ответ

1 голос
/ 07 января 2020

Как уже упоминалось, это должно решить

library(svDialogs)
library(getPass)

db_function <- function(database) {
  login_1 <- dlg_input(message = paste("Input", database, "Username:"), Sys.info()["login_1"])$res
  login_2 <- getPass(msg = paste("Input", database, "Password:"))
  if(database == "DB1") {
    host <- "host1"
    port <- 9999
  } else
  if(database == "DB2") {
    host <- "host2"
    port <- 9999
  } else
  if(database == "DB3") {
    host <- "host3"
    port <- 9999
  } else
  if(database == "DB4") {
    host <- "host4"
    port <- 9999
  }
  else {
    host <- dlg_input(message = paste("Input", database, "Host Name:"),
                      Sys.info()["host"])$res
    port <- dlg_input(message = paste("Input", database, "Port Number:"),
                      Sys.info()["port"])$res
  }
  connect_string <- paste(
    "(DESCRIPTION=",
    "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
    "(CONNECT_DATA=(SERVICE_NAME=", database, ")))", sep = "")
}

## executes incorrectly (programmed but still prompted to input manually)    
db_function("DB3")

## executes correctly (programmed and not prompted to input manually)
db_function("DB4")

## executes correctly (not programmed, so prompted to input manually)
db_function("DB5")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...