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 に答える