带有登录提示的数据库连接大家好,
我一直在编写一个连接到数据库系统然后提取一些数据的脚本。
该脚本使用我的凭据可以正常工作,但是由于必须更新密码,这些凭据每隔几个月就会更改一次,因此我经常不得不更改脚本。 我们还在考虑将此脚本推向验证路线,这意味着一旦验证了脚本,我们将无法更改该脚本。 因此,我想添加一个提示,以便任何人都可以使用这个脚本,并且它可以通过验证。
目前的脚本如下(UID和密码是需要输入的详细信息):
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\!""
)
如果有人可以帮助我找到添加提示的方法,那就太好了。
提前致谢,
雅各布
回复:带有登录提示的数据库连接在我的系统(v17.1)上,查看存储查询结果的数据集,有表脚本源、从数据库更新、保存到数据库密码以纯文本形式显示。
可以通过以下方式在首选项中停用此类表格脚本的生成表格 >隐藏 ODBC 连接字符串。
Jmp 注释 621050
是否有一个选项可以阻止用户停用隐藏 ODBC 连接字符串,跑步执行 SQL(my_dbc, ...)并从表脚本中获取密码。
回复:带有登录提示的数据库连接双竖线(“||”)告诉 JMP 连接两个字符串。 所以尝试:
"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;"
回复:带有登录提示的数据库连接嗨伊恩,
再次感谢您回复我的问题。 我看到这会生成对话框并保存我输入的密码,但我仍然不确定在连接到数据库时如何将其输入到下面的代码中。
抱歉让您感到痛苦,您帮了很大的忙!
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\!""
));
回复:带有登录提示的数据库连接您的数据库人员会对这种解决方案感到满意吗?
- 在数据库上创建一个具有必要权限的应用程序帐户,其密码永不过期。
- 创建一个加密的定义函数 GET_DBC 的 jsl 文件。
- GET_DBC 函数使用正确的 dsn 字符串调用 CREATE DATABASE CONNECTION,并返回数据库连接。
- 在主程序中,您将使用数据库连接调用 EXECUTE SQL
- 完成后,调用 CLOSE DATABASE CONNECTION。
这是 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
回复:带有登录提示的数据库连接我倾向于喜欢非模式用户界面,因此假设您的代码将进入上面的“OKscript”。
如果您想让对话框与现有代码内联,则需要进行一些小的更改。
请注意,还有其他(更好的?)方法来构建数据库连接字符串。
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);
回复:带有登录提示的数据库连接嗨伊恩,
谢谢你回到我身旁。
您知道如何使用这个新的提示框并将其夹在我当前的代码中吗? 出现该框后,我们输入 ID 和密码,然后将其放入我们连接数据库的代码行中?
我尝试使用带引号和不带引号的“teb1”和“user”。 当然,我一定缺少一些东西,这意味着它不起作用?
我看到提示适用于密码,但是我无法弄清楚如何获取此密码然后将密码放入数据库查询中。
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\!""
);
谢谢,
雅各布
回复:带有登录提示的数据库连接大概是这样的:
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));
);回复:带有登录提示的数据库连接如果我没记错的话,这有一些想法如何在 JSL 中处理用户密码信息(ODBC 连接字符串)