Connessione al database con richiesta di accessoCiao a tutti,
Ho lavorato su uno script che si connette a un sistema di database e quindi estrae alcuni dati.
Lo script funziona correttamente utilizzando le mie credenziali, tuttavia poiché queste credenziali cambiano ogni due mesi a causa della necessità di aggiornare la password, spesso devo cambiare lo script. Stiamo anche cercando di spingere questo script lungo il percorso della convalida, il che significa che non saremmo in grado di modificare lo script una volta convalidato. Voglio quindi aggiungere un prompt in modo che chiunque possa utilizzare questo script e possa passare attraverso la convalida.
Di seguito è riportato lo script attualmente (l'UID e la password sono i dettagli che dovrebbero essere inseriti):
Dt1=Open Database(
"DSN=MACPAC;SYSTEM=MEDIUK;UID=INSERT;PASSWORD=INSERT;DBQ=MPDAT10;DFTPKGLIB=QGPL;LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;QRYSTGLMT=-1;",
"Select ixplot as batchid,
ixppn as product_part_no,
ixrecq as batch_size,
ixlevl as macpac_level,
ixcpn as comp_part_no,
ixcpde as comp_desc,
ixclot as comp_lot_no,
ixcmpo as comp_order_no,
ixissq as comp_qty,
ixvend as vendor_code,
ixvlot as vendor_lot_no,
ixseqn as sequence
FROM \!"MPDAT10\!".\!"ICM860P\!""
)
Se qualcuno potesse aiutarmi a trovare un modo per aggiungere un prompt, sarebbe fantastico.
Grazie in anticipo,
Giacobbe
Re: Connessione al database con prompt di loginSul mio sistema (v17.1), guardando i set di dati che memorizzano i risultati della query, ci sono script di tabelle Origine, Aggiorna da DB, Salva in DB con la password in testo normale.
La generazione di tali script di tabelle può essere disattivata nelle preferenze tramite Tabelle > Nascondi la stringa di connessione ODBC.
Jmp Nota 621050
Bis c'è un'opzione per impedire a un utente di disattivare Nascondi la stringa di connessione ODBC , corsa Esegui SQL(my_dbc, ...) e ottenere la password dagli script della tabella.
Re: Connessione al database con prompt di loginLe doppie barre verticali ('||') indicano a JMP di concatenare due stringhe di caratteri. Allora prova:
"DSN=MACPAC;SYSTEM=MEDIUK;UID="||user||";PASSWORD="||pass||";DBQ=MPDAT10;DFTPKGLIB=QGPL;LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;QRYSTGLMT=-1;"
Re: Connessione al database con prompt di loginCiao Ian,
Grazie ancora per aver risposto alla mia domanda. Vedo che questo produce la finestra di dialogo e salva la password che ho inserito, ma non sono ancora sicuro di come supporre di inserirla nel codice sottostante durante la connessione al database.
Scusa se ti disturbo, sei stato molto utile!
NamesDefaultToHere(1);
// Your first code block
Speak("First code block", wait(1));
// Using a 'modal' window delays execution of subsequent code until input is given
nw = NewWindow("Connect To Database", << Modal, << returnResult,
PanelBox("Input your credentials",
LineUpBox(NCol(2),
TextBox("User:"),
teb1 = TextEditBox("", << setWidth(200)),
TextBox("Password:"),
teb2 = TextEditBox("", << setWidth(200), << passwordStyle(1))
);
),
LineUpBox(NCol(2),
ButtonBox("OK"),
ButtonBox("Cancel")
);
);
// Your second code block
// Stop if the user canecls . . .
if(nw["Button"] == -1, Speak("User Cancelled"); Stop());
// . . . else get the values the user gave
user = nw["teb1"];
pass = nw["teb2"];
DBconnectionString = "User is "||user||" password is "||pass;
Speak(DBconnectionString);
MACPAC_CHARTGEN = Function( {},/* Tell MACPAC to open the materials data from a certain table*/
Dt1=Open Database(
"DSN=MACPAC;SYSTEM=MEDIUK;UID=||user||;PASSWORD=||pass;DBQ=MPDAT10;DFTPKGLIB=QGPL;LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;QRYSTGLMT=-1;",
"Select ixplot as batchid,
ixppn as product_part_no,
ixrecq as batch_size,
ixlevl as macpac_level,
ixcpn as comp_part_no,
ixcpde as comp_desc,
ixclot as comp_lot_no,
ixcmpo as comp_order_no,
ixissq as comp_qty,
ixvend as vendor_code,
ixvlot as vendor_lot_no,
ixseqn as sequence
FROM \!"MPDAT10\!".\!"ICM860P\!""
));
Re: Connessione al database con prompt di loginIl personale del tuo database sarebbe soddisfatto di questo tipo di soluzione?
- Crea un account dell'applicazione sul database che disponga dei privilegi necessari, la cui password non scade mai.
- Creare un crittografato jsl che definisce la funzione GET_DBC.
- La funzione GET_DBC chiama CREATE DATABASE CONNECTION utilizzando la stringa dsn corretta e restituisce la connessione al database.
- Nel tuo programma principale dovresti effettuare chiamate a EXECUTE SQL utilizzando la connessione al database
- Quando hai finito, chiama CHIUDI CONNESSIONE AL DATABASE.
Ecco una versione semplice di GET_DBC.
/*
File Name: Get_DBC.JSL
Description: Function to get database connection string
*/
get_dbc = function({}, {default local},
my_dbc = "";
dsn_string = "Driver={Oracle in OraClient12Home1};Dbq=MY_TNS_ENTRY;UID=USERNAME;PWD=PASSWORD;";
my_dbc = create database connection(dsn_string);
// Return the connection to Oracle
my_dbc;
); // end Get_DBC.JSL
Re: Connessione al database con prompt di loginTendo ad apprezzare un'interfaccia utente non modale, quindi supponevo che il tuo codice andasse in "OKscript" sopra.
Se vuoi inserire la finestra di dialogo in linea con il codice esistente, devi apportare alcune piccole modifiche.
Tieni presente che esistono altri modi (migliori?) Per creare la stringa di connessione del database.
NamesDefaultToHere(1);
// Your first code block
Speak("First code block", wait(1));
// Using a 'modal' window delays execution of subsequent code until input is given
nw = NewWindow("Connect To Database", << Modal, << returnResult,
PanelBox("Input your credentials",
LineUpBox(NCol(2),
TextBox("User:"),
teb1 = TextEditBox("", << setWidth(200)),
TextBox("Password:"),
teb2 = TextEditBox("", << setWidth(200), << passwordStyle(1))
);
),
LineUpBox(NCol(2),
ButtonBox("OK"),
ButtonBox("Cancel")
);
);
// Your second code block
// Stop if the user canecls . . .
if(nw["Button"] == -1, Speak("User Cancelled"); Stop());
// . . . else get the values the user gave
user = nw["teb1"];
pass = nw["teb2"];
DBconnectionString = "User is "||user||" password is "||pass;
Speak(DBconnectionString);
Re: Connessione al database con prompt di loginCiao Ian,
Grazie per avermi richiamato.
Sai come saresti in grado di utilizzare questa nuova finestra di messaggio ma di inserirla nel mio codice attuale? In modo che appaia la casella, quindi inseriamo l'ID e la password e poi questo viene inserito nella riga di codice dove ci colleghiamo al database?
Ho provato a usare "teb1" e "user" sia con che senza virgolette. Sicuramente mi manca qualcosa, il che significa che non funziona?
Vedo che il prompt funziona per il passowrd, tuttavia non riesco a capire come ottenerlo per poi inserire la password nella query del database.
NamesDefaultToHere(1);
nw = NewWindow("Cooext To Database",
PanelBox("Input your credentials",
LineUpBox(NCol(2),
TextBox("User:"),
teb1 = TextEditBox("", << setWidth(200)),
TextBox("Password:"),
teb2 = TextEditBox("", << setWidth(200), << passwordStyle(1))
);
),
LineUpBox(NCol(2),
ButtonBox("OK", OKscript),
ButtonBox("Cancel", nw << closeWindow)
);
);
OKScript =
Expr(
nw << closeWindow;
user = teb1 << getText;
pass = teb2 << getText;
// DB connection info . . .
Speak("User was "||user, wait(1));
Speak("Password was "||pass, wait(1));
);
Dt1=Open Database(
"DSN=MACPAC;SYSTEM=MEDIUK;UID=(HOW TO GET UID HERE?);PASSWORD=(HOW TO GET PASSWORD HERE?;DBQ=MPDAT10;DFTPKGLIB=QGPL;LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;QRYSTGLMT=-1;",
"Select ixplot as batchid,
ixppn as product_part_no,
ixrecq as batch_size,
ixlevl as macpac_level,
ixcpn as comp_part_no,
ixcpde as comp_desc,
ixclot as comp_lot_no,
ixcmpo as comp_order_no,
ixissq as comp_qty,
ixvend as vendor_code,
ixvlot as vendor_lot_no,
ixseqn as sequence
FROM \!"MPDAT10\!".\!"ICM860P\!""
);
Grazie,
Giacobbe
Re: Connessione al database con prompt di loginProbabilmente qualcosa del genere:
NamesDefaultToHere(1);
nw = NewWindow("Cooext To Database",
PanelBox("Input your credentials",
LineUpBox(NCol(2),
TextBox("User:"),
teb1 = TextEditBox("", << setWidth(200)),
TextBox("Password:"),
teb2 = TextEditBox("", << setWidth(200), << passwordStyle(1))
);
),
LineUpBox(NCol(2),
ButtonBox("OK", OKscript),
ButtonBox("Cancel", nw << closeWindow)
);
);
OKScript =
Expr(
nw << closeWindow;
user = teb1 << getText;
pass = teb2 << getText;
// DB connection info . . .
Speak("User was "||user, wait(1));
Speak("Password was "||pass, wait(1));
);Re: Connessione al database con prompt di loginSe non ricordo male questo ha alcune idee Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)