A.D.TEJPAL
adtp at hotmail.com
Sat Jul 15 08:03:20 CDT 2006
Rocky, If linked tables are imported AFTER setting the password for BE, you will be prompted once for the BE password and the links will get established. Thereafter, so long as the BE path remains undisturbed, you do can keep referring to CurrentDb as usual. There will be no error and you do not have to bother about the BE. However, if the BE password is set or changed after table links have already been established, it will be necessary to modify the connect strings for linked tables accordingly. Once that has been done, you can carry on smoothly as per previous para. Sample subroutine named P_RefreshLinks(), as given below facilitates setting up the revised links even if the BE has a changed or newly set up password. It takes the full path of BE as its argument. Best wishes, A.D.Tejpal --------------- ==================================== Sub P_RefreshLinks(ByVal BePath As Variant) ' References - DAO 3.6 and MS Scripting RunTime. ' ReLinks all tables pertaining to BackEnd db ' identified by BePath. ' BePath is the full path of BE db ' (complete with file extn) On Error Resume Next Dim Cnt As Long, CheckPwd As String Dim Lnk1 As String, Lnk2 As String, Lnk3 As String Dim Lnk As String, Dbn As String, Cns As String Dim db As DAO.Database, tdf As TableDef Dim fso As FileSystemObject ' Check for existence of BE db Set fso = New FileSystemObject If fso.FileExists(Nz(BePath, "")) = False Then MsgBox "Db Path Does Not Exist" & _ vbCrLf & "(" & BePath & ")" GoTo ExitPoint End If ' Get name of BE db Dbn = Mid(BePath, InStrRev(BePath, "\") + 1) CheckPwd = "N" ' Default Set db = CurrentDb Cnt = 0 For Each tdf In db.TableDefs Cns = tdf.Connect ' Skip the loop if it is not a linked table, or ' if the link does not pertain to the ' specified BackEnd If Len(Cns) = 0 Or _ InStr(Cns, Dbn) = 0 Then GoTo Skip End If ' Build the Link string Lnk1 = "MS Access" Lnk3 = "DATABASE=" & BePath ' This block ensures that the connection link ' need not be re-built in every cycle of the loop If CheckPwd <> "Y" Then If InStr(Cns, "PWD=") > 0 Then Lnk2 = Mid(Cns, InStr(Cns, "PWD=")) If InStr(Cns, ";") > 0 Then Lnk2 = Left(Lnk2, InStr(Lnk2, ";") - 1) End If Lnk = Lnk1 & ";" & Lnk2 & ";" & Lnk3 Else Lnk = Lnk1 & ";" & Lnk3 End If ' InStr End If ' CheckPwd tdf.Connect = Lnk tdf.RefreshLink ' There will be error if BackEnd password has changed ' (If so, prompt for the new password) If Err.Number <> 0 Then Lnk2 = Trim(InputBox("Enter Password for " & Dbn)) ' Statement below covers the situation even if password ' for back-end db has been chnged from something to nothing. Lnk2 = IIf(Len(Lnk2) > 0, "PWD=" & Lnk2, "") Lnk = Lnk1 & ";" & _ IIf(Len(Lnk2) > 0, Lnk2 & ";", "") & Lnk3 CheckPwd = "Y" tdf.Connect = Lnk Err.Clear tdf.RefreshLink ' Error at this stage means wrong password ' was entered. Exit procedure If Err.Number <> 0 Then MsgBox "Wrong Password" GoTo ExitPoint End If End If CheckPwd = "Y" Cnt = Cnt + 1 Skip: Next MsgBox Cnt & " Tables Linked Successfully" & _ vbCrLf & "(To " & Dbn & ")" ExitPoint: Set tdf = Nothing Set db = Nothing On Error GoTo 0 ' Note - It is observed that if existing password for ' back-end db is removed altogether, the ' linked tables continue to function properly, ' without any need to refresh links. ' (even though connect string continues to ' have the old password). End Sub ==================================== ----- Original Message ----- From: Rocky Smolin - Beach Access Software To: Access Developers discussion and problem solving Sent: Friday, July 14, 2006 23:32 Subject: Re: [AccessD] [SPAM SUSPECT] Opening password protected database Bobby: I tried using set db = Currentdb after putting the password on the back end and got an 'invalid password' error when opening the first recordset to a linked table. Rocky Bobby Heid wrote: > Did not read all of the email. > > If the tables in the BE are linked, then you can use CurrentDB. You only > have to use the Opendatabse method if you are opening the BE directly. > > Now, you will have to use the password when linking the tables. > > Bobby