0

我正在使用 PowerBuilder PFC 库登录数据库。

n_cst_appmanager/pfc_open:

IF this.of_LogonDlg() > 0 THEN
    Open(w_myapp_frame)
END IF

n_cst_appmanager/ pfc_logon:

SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=mytestdb;UID=" + as_userid + ";PWD=" + as_password + "'"
connect using SQLCA;

现在,一旦用户登录,在少数情况下我需要连接到另一个数据库(例如,在那里复制一些数据),所以我想自动连接到另一个数据库,而不显示登录窗口再次,因此我需要保存用户的用户名和密码。我怎样才能保存它?我需要保存在注册表中吗?你能举一些例子吗?

例如,我可以通过以下方式获取用户 ID:

s_userid = gnv_app.of_GetUserID()

但我无法获取密码。有人可以帮我怎么做吗?非常感谢。

4

3 回答 3

1

实际上,既然我关注的是您需要什么而不是您要求的<g>,并且重复 Hugh 的回答,为什么不直接复制交易对象呢?

n_cst_String lnv_String

ltr_NewConnect.DBMS = SQLCA.DBMS
ltr_NewConnect.AutoCommit = SQLCA.AutoCommit
ltr_NewConnect.DBParm = lnv_String.of_GlobalReplace (SQLCA.DBParm, "mytestdb", "myotherdb")

如果我这样做,我会编写所有事务对象字段的副本,以防定义连接的方式发生变化。

我假设另一个数据库是相同类型的数据库,以便有意义(因此它使用相同类型的 DBParm),但无论哪种方式,原则都可能适用。

祝你好运,

特里。

于 2011-09-08T18:33:30.640 回答
0

PFC 中没有任何内置功能,PowerBuilder 中也没有任何自动功能可以帮助您解决此问题。只需创建一个实例变量和一个函数来访问它。也许在调用 of_LogonDlg() 之后立即从 Message.PowerObjectParm 中获取 n_cst_LogonAttrib 并从那里获取值。或者,进一步扩展您的 n_cst_AppManager.pfc_Logon 事件。或者扩展 of_LogonDlg(),并按照 PFC 处理用户 ID 的方式对捕获进行建模。

请注意,将密码存储在任何永久且对其他进程(如注册表)可见的地方将是许多公司不允许的安全违规行为。不是你想去的方向。

祝你好运,

特里。

于 2011-09-08T14:04:28.057 回答
0

您可以将它们解析为SQLCA.DBParm.

string ls_userID, ls_password
n_cst_string stringSrv

ls_userID = stringSrv.of_getKeyValue(SQLCA.DBParm, "UID", ";")
ls_password = stringSrv.of_getKeyValue(SQLCA.DBParm, "PWD", ";")

但是,如果您知道您将需要它们,则可以在 appmanager 中捕获它们。

为不同的数据库拥有相同的登录凭据是一个安全问题。正是这种事情导致你的公司因为错误的原因登上新闻。

于 2011-09-08T17:18:21.550 回答