帶有登錄提示的數據庫連接大家好,
我一直在編寫一個連接到數據庫系統然後提取一些數據的腳本。
該腳本使用我的憑據可以正常工作,但是由於必須更新密碼,這些憑據每隔幾個月就會更改一次,因此我經常不得不更改腳本。 我們還在考慮將此腳本推向驗證路線,這意味著一旦驗證了腳本,我們將無法更改該腳本。 因此,我想添加一個提示,以便任何人都可以使用這個腳本,並且它可以通過驗證。
目前的腳本如下(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 連接字符串)