ログインプロンプトを使用したデータベース接続こんにちは、みんな、
私はデータベース システムに接続してデータを取得するスクリプトに取り組んでいます。
私の資格情報を使用してスクリプトは正常に動作しますが、パスワードを更新する必要があるため、これらの資格情報は数か月ごとに変更されるため、スクリプトを変更する必要があることがよくあります。 また、このスクリプトを検証ルートにプッシュすることも検討しています。これは、スクリプトが検証されると変更できないことを意味します。 したがって、誰でもこのスクリプトを使用して検証できるように、プロンプトを追加したいと思います。
以下は現在のスクリプトです (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\!""
)
誰かがプロンプトを追加する方法を見つけるのを手伝ってくれれば、それは素晴らしいことです。
前もって感謝します、
ジェイコブ
Re: ログインプロンプトを使用したデータベース接続私のシステム (v17.1) では、クエリ結果を保存するデータ セットを見ると、テーブル スクリプトがあります。ソース、DBから更新、DBへ保存平文のパスワードを使用します。
このようなテーブル スクリプトの生成は、環境設定で無効にすることができます。テーブル > ODBC 接続文字列を非表示にします。
Jmpノート621050
ユーザーが非アクティブ化できないようにするオプションはありますかODBC 接続文字列を非表示にする、ランニングSQL(my_dbc, ...)を実行します。そしてテーブルスクリプトからパスワードを取得します。
Re: ログインプロンプトを使用したデータベース接続二重縦棒 ('||') は、JMP に 2 つの文字列を連結するように指示します。 それで試してみてください:
"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: ログインプロンプトを使用したデータベース接続こんにちは、イアンさん
私の質問にお答えいただきまして、重ねて御礼申し上げます。 これによりダイアログ ボックスが表示され、入力したパスワードが保存されることがわかりましたが、データベースに接続するときにこれを以下のコードにどのように入力すればよいのかまだわかりません。
ご迷惑をおかけして申し訳ありませんでした、とても助かりました!
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: ログインプロンプトを使用したデータベース接続データベース担当者はこの種のソリューションに満足しますか?
- 必要な特権を持ち、パスワードが無期限であるアプリケーション アカウントをデータベース上に作成します。
- を作成します暗号化された関数 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
Re: ログインプロンプトを使用したデータベース接続私は非モーダル UI を好む傾向があるため、コードは上記の「OKscript」に入るだろうと想定していました。
ダイアログを既存のコードとインラインで配置する場合は、いくつかの小さな変更を加える必要があります。
DB 接続文字列を構築するには他の (より良い?) 方法があることに注意してください。
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: ログインプロンプトを使用したデータベース接続こんにちは、イアンさん
私に戻ってきてくれてありがとう。
この新しいプロンプト ボックスを現在のコードにサンドイッチする以外に、どのように使用できるかご存知ですか? ボックスが表示されるように、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\!""
);
ありがとう、
ジェイコブ
Re: ログインプロンプトを使用したデータベース接続おそらく次のようなものでしょう:
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: ログインプロンプトを使用したデータベース接続私の記憶が正しければ、これにはいくつかのアイデアがありますJSL (ODBC 接続文字列) でユーザーのパスワード情報を処理する方法