मैं एक फ़ंक्शन लिख रहा हूं जो एक आर सत्र को कई ओरेकल डेटाबेस में से एक से जोड़ देगा। इस फ़ंक्शन के भीतर, उपयोगकर्ता को अपना उपयोगकर्ता नाम और पासवर्ड हमेशा इनपुट करना चाहिए, लेकिन हो सकता है को होस्ट नाम/पोर्ट नंबर इनपुट करने की आवश्यकता नहीं है, यह इस बात पर निर्भर करता है कि ये पैरामीटर पहले से प्रोग्राम किए गए हैं या नहीं कार्यक्रम। यदि होस्ट/पोर्ट फ़ंक्शन में शामिल नहीं है, तो उपयोगकर्ता को इन मापदंडों को मैन्युअल रूप से इनपुट करने के लिए प्रेरित किया जाएगा।

किसी भी कारण से, मेरा कार्य गलती से गलत बयान निष्पादित कर रहा है और उपयोगकर्ता को होस्ट नाम/पोर्ट नंबर इनपुट करने के लिए मजबूर कर रहा है, इस तथ्य के बावजूद कि वे पूर्व-प्रोग्राम किए गए डेटाबेस का उपयोग कर रहे हैं। क्या किसी को इस बात का अंदाजा है कि ऐसा क्यों हो रहा है? मुझे अभी उचित पागल चला रहा है ...

नमूना कोड के लिए नीचे देखें। किसी कारण से, केवल जो सही ढंग से क्रियान्वित हो रहा है वह अंतिम डेटाबेस (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")

किसी भी मदद के लिए बहुत बहुत धन्यवाद कोई भी इस पर पेशकश कर सकता है!

0
DJC 7 जिंदा 2020, 06:28

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि बताया गया है कि इसे हल करना चाहिए

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")
1
Bruno 7 जिंदा 2020, 05:34