Rocky Smolin
rockysmolin at bchacc.com
Mon Oct 5 11:53:27 CDT 2009
A.D.:
Thank you for the code. I should send an invoice to the client in your
favor.
Best,
Rocky
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of A.D.Tejpal
Sent: Monday, October 05, 2009 5:25 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Invalid Password
Rocky,
Subroutine P_ChangeBePwdAndRelink() as given below, will do the needful.
Place two text boxes named TxtPwdNew and TxtPwdNewConfirm (with password as
the input mask) on a form in the FE. The code in click event of command
button on this form would be:
' Code in form's module
'==========================
Private Sub CmdSetNewPwd_Click()
If Len(Me.TxtPwdNew) > 0 And _
Me.TxtPwdNewConfirm = _
Me.TxtPwdNew Then
P_ChangeBePwdAndRelink Me.TxtPwdNew
Else
MsgBox "Discrepancy in entries"
End If
End Sub
'==========================
With the above arrangement, the user simply to enters the new password
in the text boxes and clicks the command button for automated change of
password in BE, accompanied by freshly linked tables in FE.
Best wishes,
A.D. Tejpal
------------
' Code in general or form's module
'====================================
Sub P_ChangeBePwdAndRelink(NewPwd As String) On Error GoTo ErrTrap
' Changes password of back end db, and
' replaces all existing linked tables by fresh
' ones, with revised connection string as per
' new password.
Dim db As DAO.Database
Dim dbBE As DAO.Database
Dim rst As DAO.Recordset
Dim BePath As String, ConnString As String
Dim OldPwd As String, Qst As String
Dim Cnt As Long, Rtv As Variant
Dim Tnm As String
Const BePrefix As String = "DATABASE="
Const PwdPrefix As String = "PWD="
Const TempTableName As String = "T_ZZZTemp"
Set db = DBEngine(0)(0)
' Delete TempTable (T_ZZZTemp) - if existing.
On Error Resume Next
DoCmd.DeleteObject acTable, TempTableName
On Error GoTo ErrTrap
' Make fresh temp table so as to reflect latest
' status of linked tables.
Qst = "SELECT Connect, Database, " & _
" Name INTO " & TempTableName & _
" FROM MSysObjects " & _
" WHERE Type = 6;"
db.Execute Qst, dbFailOnError
Set rst = db.OpenRecordset(TempTableName)
If rst.RecordCount > 0 Then
' Get existing BE path and connect string
BePath = rst.Fields("Database")
ConnString = rst.Fields("Connect") & BePath
' Extract existing password from conn string
Rtv = Split(ConnString, ";")
OldPwd = ""
For Cnt = 0 To UBound(Rtv)
If Rtv(Cnt) Like PwdPrefix & "*" Then
OldPwd = Mid(Rtv(Cnt), _
Len(PwdPrefix) + 1)
Exit For
End If
Next
If NewPwd <> OldPwd Then
' Change BE password to new one.
Set dbBE = OpenDatabase(BePath, True, _
False, ";" & PwdPrefix & OldPwd & ";")
dbBE.NewPassword OldPwd, NewPwd
' Modify the connect string as per new password
ConnString = Replace(ConnString, _
PwdPrefix & OldPwd, _
PwdPrefix & NewPwd)
' Delete existing linked tables and recreate them
' afresh as per new connect string.
Do Until rst.EOF
Tnm = rst.Fields("Name")
DoCmd.DeleteObject acTable, Tnm
DoCmd.TransferDatabase acLink, _
"Microsoft Access", BePath, _
acTable, Tnm, Tnm
rst.MoveNext
Loop
db.TableDefs.Refresh
MsgBox "New password as specified, has " & _
"been set for the BE" & vbCrLf & _
"Connect strings for all linked tables " & _
"have also been revised accordingly"
Else
MsgBox "Newly supplied password is " & _
"same as existing one"
End If
Else
MsgBox "No Linked Tables Found"
End If
' Note:
' If the back end db is password protected,
' assignment of a new connect string by using a
' statement like tdf.Connect = ConnString becomes
' ineffective The existing connect string continues
' to hold good). Also, statement like tdf.RefreshLink
' gives error.
ExitPoint:
rst.Close
Set rst = Nothing
Set dbBE = Nothing
Set db = Nothing
On Error GoTo 0
Exit Sub
ErrTrap:
MsgBox Err.Number & " - " & Err.DESCRIPTION
Resume ExitPoint
End Sub
'=====================================
----- Original Message -----
From: Rocky Smolin
To: 'Access Developers discussion and problem solving'
Sent: Monday, October 05, 2009 09:26
Subject: Re: [AccessD] Invalid Password
A.D.:
I understand and that looks like a good solution - I prefer functions that
work through the front end with a button click - keeps the user out of the
OS.
But to change the password on the back end I believe you need to open the
BE
exclusive. So how can you change the BE password through the front end?
Thanks and regards,
Rocky Smolin
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com