Conexión de base de datos con indicador de inicio de sesiónHola a todos,
He estado trabajando en un script que se conecta a un sistema de base de datos y luego extrae algunos datos.
La secuencia de comandos funciona bien con mis credenciales, sin embargo, como estas credenciales cambian cada dos meses debido a que la contraseña debe actualizarse, a menudo tengo que cambiar la secuencia de comandos. También estamos buscando empujar este script por la ruta de la validación, lo que significa que no podremos cambiar el script una vez que esté validado. Por lo tanto, quiero agregar un aviso para que cualquiera pueda usar este script y pase por la validación.
A continuación se muestra el script actualmente (el UID y la contraseña son los detalles que se deben ingresar):
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 alguien pudiera ayudarme a encontrar una manera de agregar un aviso, sería genial.
Gracias de antemano,
jacob
Re: Conexión a la base de datos con indicador de inicio de sesiónEn mi sistema (v17.1), mirando los conjuntos de datos que almacenan los resultados de la consulta, hay scripts de tablas Fuente, Actualizar desde base de datos, Guardar en base de datos con la contraseña en texto plano.
La generación de dichos scripts de Tablas se puede desactivar en las preferencias a través de Mesas > Ocultar cadena de conexión ODBC.
Jmp Nota 621050
Bis hay una opción para evitar que un usuario desactive Ocultar cadena de conexión ODBC , correr Ejecutar SQL (mi_dbc, ...) y obtener la contraseña de los scripts de la tabla.
Re: Conexión a la base de datos con indicador de inicio de sesiónLas barras verticales dobles ('||') le indican a JMP que concatene dos cadenas de caracteres. Así que prueba:
"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: Conexión a la base de datos con indicador de inicio de sesiónHola, Ian,
Gracias de nuevo por responder a mi pregunta. Veo que esto produce el cuadro de diálogo y guarda la contraseña que ingresé, pero todavía no estoy seguro de cómo debo ingresar esto en el código a continuación cuando me conecte a la base de datos.
Lo siento por ser un dolor, ha sido de gran ayuda!
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: Conexión a la base de datos con indicador de inicio de sesión¿La gente de su base de datos estaría contenta con este tipo de solución?
- Cree una cuenta de aplicación en la base de datos que tenga los privilegios necesarios, cuya contraseña nunca caduque.
- Crear un encriptado jsl que define la función GET_DBC.
- La función GET_DBC llama a CREATE DATABASE CONNECTION utilizando la cadena dsn adecuada y devuelve la conexión de la base de datos.
- En su programa principal, haría llamadas a EXECUTE SQL usando la conexión de la base de datos
- Cuando haya terminado, llame a CERRAR CONEXIÓN DE LA BASE DE DATOS.
Aquí hay una versión 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: Conexión a la base de datos con indicador de inicio de sesiónTiendo a gustarme una interfaz de usuario no modal, por lo que supuse que su código entraría en 'OKscript' arriba.
Si desea poner el cuadro de diálogo en línea con el código existente, debe realizar algunos cambios pequeños.
Tenga en cuenta que hay otras formas (¿mejores?) de crear la cadena de conexión de la base de datos.
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: Conexión a la base de datos con indicador de inicio de sesiónHola, Ian,
Gracias por volver a mí.
¿Sabe cómo podría usar este nuevo cuadro de aviso pero intercalarlo en mi código actual? Para que aparezca el cuadro, luego ingresamos la identificación y la contraseña y luego eso se coloca en la línea de código donde nos conectamos a la base de datos.
He intentado usar "teb1" y "usuario" con y sin comillas. Seguramente me debe faltar algo, lo que significa que no está funcionando.
Veo que el indicador funciona para la contraseña, sin embargo, no puedo averiguar cómo obtener esto para luego colocar la contraseña en la consulta de la base de datos.
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\!""
);
Gracias,
jacob
Re: Conexión a la base de datos con indicador de inicio de sesiónProbablemente algo como esto:
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: Conexión a la base de datos con indicador de inicio de sesiónsi no recuerdo mal esto tiene algunas ideas Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)