Jim Dettman
jimdettman at verizon.net
Fri Feb 17 12:49:56 CST 2012
<<Is anyone doing something like this?>>
Yup. Have done it two different ways:
1. With DSN's
2. Without DSN's
With either, it's really no different then linking to a new JET DB; you're
just modifying the tabledefs connect string by either swapping a server name
or a DSN name.
What I have is a table that has the DS for each company and just use
different company ID's when I need do to testing or a play area.
Only wrinkle is that I have some tables in a common DB that are shared
across companies (ie. country or currency tables), so I have a flag if the
table entry should be switch or not on a company switched.
Code below is swapping a DSN.
Jim.
Function ReattachODBCTables(strCompID As String) As Boolean
' Using usys_tblODBCDataSources, refresh ODBC connect string
' strings for all ODBC connections.
' If a Company ID is passed in, only refresh those tables
' indicated to be switched.
' If one is not passed in, refresh all links.
Dim strTblName As String
Dim strConn As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim tbl As DAO.TableDef
Dim pb As New Form_frmProgBar
Dim strDSN As String
Dim intTableCount As Integer
Dim intNumberOfTables As Integer
Dim intProcess As Integer
Dim varRet As Variant
10 On Error Resume Next
20 Set db = CurrentDb
30 Set rs = db.OpenRecordset("usys_tblODBCDataSources")
40 intNumberOfTables = rs.RecordCount
50 intTableCount = 0
60 pb.SetMessage "Reattaching ODBC tables"
70 pb.SetBarVisible True
80 With rs
90 While Not .EOF
100 If strCompID <> "" Then
110 If rs("CompanySwitch") = True Then
120 intProcess = True
130 strDSN = strCompID
140 Else
150 intProcess = False
160 End If
170 Else
180 intProcess = True
190 strDSN = rs("DSN")
200 End If
210 If intProcess = True Then
' ---------------------------------------------
' Link table
' ---------------------------------------------
220 strTblName = rs("LocalTableName")
230 strConn = "ODBC;" & _
"DSN=" & strDSN & ";" & _
"APP=MicrosoftR Access"
240 If (DoesTblExist(rs("LocalTableName")) = False) Then
250 Err = 0
260 Set tbl = db.CreateTableDef(rs("LocalTableName"), _
rs("ODBCTableName"), _
strConn)
270 db.TableDefs.Append tbl
280 Else
290 Err = 0
300 Set tbl = db.TableDefs(rs("LocalTableName"))
310 tbl.Connect = strConn
320 tbl.RefreshLink
330 End If
340 If Err <> 0 Then
350 MsgBox "Error reattaching ODBC table " & strTblName, 16,
"Can't run the " & AppName()
360 GoTo ReattachODBCTables_Err
370 End If
380 End If
390 intTableCount = intTableCount + 1
400 pb.SetBarPercent (intTableCount / intNumberOfTables) * 100
410 rs.MoveNext
420 Wend
430 End With
440 ReattachODBCTables = True
ReattachODBCTables_End:
450 On Error Resume Next
460 Set pb = Nothing
470 Set tbl = Nothing
480 rs.Close
490 Set rs = Nothing
500 Set db = Nothing
510 Exit Function
ReattachODBCTables_Err:
520 ReattachODBCTables = False
530 GoTo ReattachODBCTables_End
End Function
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
Sent: Friday, February 17, 2012 12:29 PM
To: Access Developers discussion and problem solving
Subject: [AccessD] Testing SQL Server linked FEs
To this point I have always worked with MDB data stores. When I did testing
where I needed to
modify data (adds/ deletes / edits) I would copy the BE files to a local
directory and then map that
local directory to the X: drive where all the links pointed to. Voila,
"test mode".
Obviously that doesn't work with links to SQL Server. I have seen code for
modifying the link info
of the tabledef, storing the server / database info in a local table in the
FE. That seems like one
solution. Is anyone doing something like this?
--
John W. Colby
Colby Consulting
Reality is what refuses to go away
when you do not believe in it
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com