Connexion à la base de données avec invite de connexionSalut tout le monde,
J'ai travaillé sur un script qui se connecte à un système de base de données, puis extrait des données.
Le script fonctionne correctement en utilisant mes informations d'identification, mais comme ces informations d'identification changent tous les deux mois en raison de la nécessité de mettre à jour le mot de passe, je dois souvent modifier le script. Nous envisageons également de pousser ce script sur la voie de la validation, ce qui signifie que nous ne serions pas en mesure de modifier le script une fois qu'il est validé. Je veux donc ajouter une invite afin que n'importe qui puisse utiliser ce script et qu'il passe par la validation.
Ci-dessous se trouve le script actuellement (l'UID et le mot de passe sont les détails qui devraient être saisis):
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\!""
)
Si quelqu'un pouvait m'aider à trouver un moyen d'ajouter une invite, ce serait formidable.
Merci d'avance,
Jacob
Re : connexion à la base de données avec invite de connexionSur mon système (v17.1), en regardant les ensembles de données qui stockent les résultats de la requête, il existe des scripts de tables Source, mise à jour à partir de la base de données, enregistrement dans la base de données avec le mot de passe en clair.
La génération de tels scripts Tables peut être désactivée dans les préférences via Tableaux > Masquez la chaîne de connexion ODBC.
Note Jmp 621050
Bis existe-t-il une option pour empêcher un utilisateur de désactiver Masquer la chaîne de connexion ODBC , en cours Exécuter SQL(my_dbc, ...) et obtenir le mot de passe à partir des scripts de table.
Re : connexion à la base de données avec invite de connexionLes doubles barres verticales ('||') indiquent à JMP de concaténer deux chaînes de caractères. Alors essayez :
"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 : connexion à la base de données avec invite de connexionSalut Ian,
Merci encore d'avoir répondu à ma question. Je vois que cela produit la boîte de dialogue et enregistre le mot de passe que j'ai saisi, mais je ne suis toujours pas sûr de la façon dont je suis supposé l'introduire dans le code ci-dessous lors de la connexion à la base de données.
Désolé d'être une douleur, vous avez été très 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 : connexion à la base de données avec invite de connexionLes gens de votre base de données seraient-ils satisfaits de ce type de solution ?
- Créez un compte d'application sur la base de données qui possède les privilèges nécessaires, dont le mot de passe n'expire jamais.
- Créé un crypté jsl qui définit la fonction GET_DBC.
- La fonction GET_DBC appelle CREATE DATABASE CONNECTION en utilisant la chaîne dsn appropriée et renvoie la connexion à la base de données.
- Dans votre programme principal, vous feriez des appels à EXECUTE SQL en utilisant la connexion à la base de données
- Lorsque vous avez terminé, appelez CLOSE DATABASE CONNECTION.
Voici une version simple de 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 : connexion à la base de données avec invite de connexionJ'ai tendance à aimer une interface utilisateur non modale, donc je supposais que votre code irait dans 'OKscript' ci-dessus.
Si vous souhaitez mettre la boîte de dialogue en ligne avec le code existant, vous devez apporter quelques petites modifications.
Sachez qu'il existe d'autres moyens (meilleurs ?) De créer la chaîne de connexion à la base de données.
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 : connexion à la base de données avec invite de connexionSalut Ian,
Merci de m'avoir répondu.
Savez-vous comment vous seriez capable d'utiliser cette nouvelle boîte de dialogue mais de l'insérer dans mon code actuel ? Pour que la boîte apparaisse, on saisit alors l'identifiant et le mot de passe et ensuite cela est mis dans la ligne de code où l'on se connecte alors à la base de données ?
J'ai essayé d'utiliser "teb1" et "user" avec et sans guillemets. Je dois sûrement manquer un petit quelque chose qui signifie que cela ne fonctionne pas?
Je vois que l'invite fonctionne pour le mot de passe, mais je ne sais pas comment l'obtenir pour ensuite mettre le mot de passe dans la requête de la base de données.
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\!""
);
Merci,
Jacob
Re : connexion à la base de données avec invite de connexionProbablement quelque chose comme ça :
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 : connexion à la base de données avec invite de connexionSi je me souviens bien cela a quelques idées Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)