Вход в приложение PowerBuilder - PullRequest
       31

Вход в приложение PowerBuilder

0 голосов
/ 08 сентября 2011

Я использую библиотеку 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;

Теперь, когда пользователь вошел в систему, есть несколько ситуаций, в которых мне нужно будет подключиться к другой базе данных (например, чтобы скопировать туда некоторые данные), поэтому я хотел бы подключиться к другой базе данных автоматически, без отображения снова окно входа в систему, поэтому мне нужно будет сохранить имя пользователя и пароль пользователя. Как я могу сохранить это? Нужно ли сохранять в реестре? Можете ли вы привести пример, пожалуйста?

Например, я могу получить идентификатор пользователя следующим образом:

s_userid = gnv_app.of_GetUserID()

Но я не могу получить пароль. Может кто-нибудь, пожалуйста, помогите мне, как я могу это сделать? Большое спасибо.

Ответы [ 3 ]

1 голос
/ 08 сентября 2011

На самом деле, теперь, когда я обращаю внимание на то, что вам нужно, а не на то, что вы просили <g>, и перебив ответ Хью, почему бы просто не скопировать объект транзакции?

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), но в любом случае может применяться принцип.

Удачи,

Терри.

0 голосов
/ 08 сентября 2011

Вы можете разобрать их из 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", ";")

Тем не менее, можно сделать хороший пример для их захвата в менеджере приложений, если вы знаете, что они вам понадобятся.

Наличие одинаковых учетных данных для входа в разные базы данных является проблемой безопасности. Именно такие вещи приводят к тому, что ваша компания появляется в новостях по неправильным причинам.

0 голосов
/ 08 сентября 2011

В PFC нет ничего встроенного, и в PowerBuilder нет ничего автоматического, что поможет вам в этом.Просто создайте переменную экземпляра и функцию для доступа к ней.Может быть, получить n_cst_LogonAttrib из Message.PowerObjectParm сразу после вызова of_LogonDlg () и получить значение оттуда.Или продлите ваше событие n_cst_AppManager.pfc_Logon.Или расширьте of_LogonDlg () и смоделируйте захват после того, как PFC делает идентификатор пользователя.

Обратите внимание, что хранение пароля в любом месте, постоянном и видимом для других процессов, таких как реестр, будет нарушением безопасности, что многие компании не будутразрешать.Не то направление, куда вы хотите идти.

Удачи,

Терри.

...