rbcarver
asked on
Update linked tables in access using vba
I have a database with about 50 tables linked to a SQL Server catalog. I have a catalog for each month using the following naming convention MTHYYYY.
To switch between catalogs I currently update my ODBC connection pointing to a new month then update all linked tables in my Access database using the "linked table manager" selecting "always prompt for new location". The catalogs are secured usingSQL Server authenication and are the same for each catalog.
I would like to use VBA to update my linked tables and or point my ODBC connection to a new month allowing me to run queries across multiple months without have to change my ODBC connection and update all linked tables manually. Also - it would be a bonus if other users / computers could connect to these tables w/o having to manually configure an ODBC connection.
Current Connection: DSN=Prime;APP=Microsoft Office 2003;WSID=SERVER;DATABASE= MTHYYYY;Ne twork=ANON
To switch between catalogs I currently update my ODBC connection pointing to a new month then update all linked tables in my Access database using the "linked table manager" selecting "always prompt for new location". The catalogs are secured usingSQL Server authenication and are the same for each catalog.
I would like to use VBA to update my linked tables and or point my ODBC connection to a new month allowing me to run queries across multiple months without have to change my ODBC connection and update all linked tables manually. Also - it would be a bonus if other users / computers could connect to these tables w/o having to manually configure an ODBC connection.
Current Connection: DSN=Prime;APP=Microsoft Office 2003;WSID=SERVER;DATABASE=
ASKER
I changed the DATABASE="XYZ part to the database/catalog I was trying to connect to and received the following error:
Connection failed:
SQLState: '08004'
SQL Server Error: 4060
Server rejected the connectioN; Access to selected database has been denied
A window then popped up allowing me to point to the correct server / database but errors out.
Connection failed:
SQLState: '08004'
SQL Server Error: 4060
Server rejected the connectioN; Access to selected database has been denied
A window then popped up allowing me to point to the correct server / database but errors out.
Hmm, does the build string look like the:
DSN=Prime;APP=Microsoft Office 2003;WSID=SERVER;DATABASE= MTHYYYY;Ne twork=ANON
you need ?
Just use a breakpoint and ?td.Connect in the immediate window to findout the value before and after the assign statement.
Nic;o)
DSN=Prime;APP=Microsoft Office 2003;WSID=SERVER;DATABASE=
you need ?
Just use a breakpoint and ?td.Connect in the immediate window to findout the value before and after the assign statement.
Nic;o)
ASKER
I am sorry but I do not follow. The database I am connecting to is not in the same folder as the frontend - it is a SQL Server. Could this have something to do with my error?
The "working" td.Connect should be modified.
Thus my advise to check the present connection (e.g. in the queries properties popup form) and change the part that needs to be changed.
Can you show the string from a working linked table ? (Open the table in design mode and activate the properties)
Nic;o)
Thus my advise to check the present connection (e.g. in the queries properties popup form) and change the part that needs to be changed.
Can you show the string from a working linked table ? (Open the table in design mode and activate the properties)
Nic;o)
ASKER
This is it:
ODBC;DSN=Prime;APP=Microso ft Office 2003;WSID=ADMFIN;DATABASE= MTHYYYY;Ne twork=ANON ;TABLE=dbo ._Codes
ODBC;DSN=Prime;APP=Microso
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Function fncRelink()
'function to relink tables to the "_be" database
'It's assumed that the "_be" database is in the same folder as the frontend !
Dim td As DAO.TableDef
For Each td In CurrentDb.TableDefs
If Len(td.Connect) > 0 Then
td.Connect = ";DATABASE=" & Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & Mid(td.Connect, InStrRev(td.Connect, "\") + 1)
td.RefreshLink
End If
Next
MsgBox "Ready, tables relinked"
End Function
But you can ofcourse change the path part.
Nic;o)