Datenbankverbindung mit AnmeldeaufforderungHallo alle,
Ich habe an einem Skript gearbeitet, das eine Verbindung zu einem Datenbanksystem herstellt und dann einige Daten abruft.
Das Skript funktioniert mit meinen Anmeldeinformationen einwandfrei. Da sich diese Anmeldeinformationen jedoch alle paar Monate ändern, weil das Passwort aktualisiert werden muss, muss ich das Skript häufig ändern. Wir überlegen auch, dieses Skript auf dem Weg der Validierung voranzutreiben, was bedeutet, dass wir das Skript nach der Validierung nicht mehr ändern können. Ich möchte daher eine Eingabeaufforderung hinzufügen, damit jeder dieses Skript verwenden kann und es die Validierung durchläuft.
Unten ist das aktuelle Skript (die UID und das Passwort sind die Details, die eingegeben werden müssten):
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\!""
)
Wenn mir jemand helfen könnte, eine Möglichkeit zu finden, eine Eingabeaufforderung hinzuzufügen, wäre das großartig.
Vielen Dank im Voraus,
Jacob
Betreff: Datenbankverbindung mit AnmeldeaufforderungWenn ich mir auf meinem System (Version 17.1) die Datensätze ansehe, in denen die Abfrageergebnisse gespeichert sind, gibt es Tabellenskripte Quelle, Update von DB, Speichern in DB mit dem Passwort im Klartext.
Die Generierung solcher Tabellenskripte kann in den Einstellungen über deaktiviert werden Tabellen > ODBC-Verbindungszeichenfolge ausblenden.
Jmp-Hinweis 621050
Bis gibt es eine Option, um die Deaktivierung durch einen Benutzer zu verhindern ODBC-Verbindungszeichenfolge ausblenden , Betrieb SQL ausführen(my_dbc, ...) und das Passwort aus den Tabellenskripten abrufen.
Betreff: Datenbankverbindung mit AnmeldeaufforderungDie doppelten vertikalen Balken ('||') weisen JMP an, zwei Zeichenfolgen zu verketten. Also versuche:
"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;"
Betreff: Datenbankverbindung mit AnmeldeaufforderungHallo Ian,
Nochmals vielen Dank für die Beantwortung meiner Frage. Ich sehe, dass dadurch das Dialogfeld angezeigt wird und das von mir eingegebene Kennwort gespeichert wird. Ich bin mir jedoch immer noch nicht sicher, wie ich dies dann in den folgenden Code einspeisen soll, wenn ich eine Verbindung zur Datenbank herstelle.
Tut mir leid, dass es dir weh tut, du warst sehr hilfreich!
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\!""
));
Betreff: Datenbankverbindung mit AnmeldeaufforderungWürden Ihre Datenbankmitarbeiter mit einer solchen Lösung zufrieden sein?
- Erstellen Sie in der Datenbank ein Anwendungskonto mit den erforderlichen Berechtigungen, dessen Kennwort niemals abläuft.
- Erstelle ein verschlüsselt jsl-Datei, die die Funktion GET_DBC definiert.
- Die Funktion GET_DBC ruft CREATE DATABASE CONNECTION mit der richtigen DSN-Zeichenfolge auf und gibt die Datenbankverbindung zurück.
- In Ihrem Hauptprogramm würden Sie EXECUTE SQL über die Datenbankverbindung aufrufen
- Wenn Sie fertig sind, rufen Sie „Datenbankverbindung schließen“ auf.
Hier ist eine einfache Version von 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
Betreff: Datenbankverbindung mit AnmeldeaufforderungIch bevorzuge eine nicht-modale Benutzeroberfläche, daher bin ich davon ausgegangen, dass Ihr Code oben in „OKscript“ eingefügt wird.
Wenn Sie den Dialog in vorhandenen Code integrieren möchten, müssen Sie einige kleine Änderungen vornehmen.
Beachten Sie, dass es andere (bessere?) Möglichkeiten gibt, die DB-Verbindungszeichenfolge zu erstellen.
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);
Betreff: Datenbankverbindung mit AnmeldeaufforderungHallo Ian,
Vielen Dank, dass Sie sich bei mir gemeldet haben.
Wissen Sie, wie Sie dieses neue Eingabeaufforderungsfeld verwenden könnten, wenn Sie es nicht in meinen aktuellen Code einbauen würden? Damit das Feld erscheint, geben wir dann die ID und das Passwort ein und das wird dann in die Codezeile eingefügt, in der wir dann eine Verbindung zur Datenbank herstellen?
Ich habe versucht, „teb1“ und „user“ sowohl mit als auch ohne Anführungszeichen zu verwenden. Sicherlich muss mir eine Kleinigkeit fehlen, was bedeutet, dass es nicht funktioniert?
Ich sehe, dass die Eingabeaufforderung für das Passwort funktioniert, ich kann jedoch nicht herausfinden, wie ich das erreichen kann, um das Passwort dann in die Datenbankabfrage einzugeben.
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\!""
);
Danke,
Jacob
Betreff: Datenbankverbindung mit AnmeldeaufforderungWahrscheinlich so etwas:
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));
);Betreff: Datenbankverbindung mit AnmeldeaufforderungWenn ich mich richtig erinnere, enthält dies einige Ideen Umgang mit Benutzerkennwortinformationen in JSL (ODBC-Verbindungszeichenfolgen)