링크 된 테이블 관리자 (LTM)의 문제점은 SQL 뷰에 실제로 연결된 테이블을 링크 한 경우입니다. 이 경우, LTM은 적절한 PK를 재 할당하지 않고 "테이블"을 다시 링크 할 것이며, 업데이트 할 수 없게됩니다. VBE에서 시작하는 데 사용했던 몇 가지 코드를 작성했습니다. 빠르고 지저분한 것입니다.하지만 필요할 때 확실히 적용 할 수 있습니다. 테이블에는 2 개, 경유 쿼리에는 1 개씩 2 개의 하위가 있습니다.
Option Compare Database
option explicit
Const kOld = "remote.g" 'string to identify old server
'new server odbc string
Const kConnLux = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=xxxx;UID=yyyy;PWD=zzzz;"
Sub UpdateTables()
Dim db As Database, td As TableDef
Dim hasIndex As Boolean, strSql As String
Set db = CurrentDb
For Each td In db.TableDefs
If InStr(1, td.Connect, kOld) > 0 Then 'lien vers CE serveur ?
If td.Name Like "dbo_vw*" And td.Indexes.count = 1 Then 'table = vue attachee --> pbl de clef primaire
strSql = "CREATE INDEX " & td.Indexes(0).Name & " ON [" & td.Name & "](" & td.Indexes(0).Fields & ")"
' convert field list from (+fld1;+fld2) to (fld1,fld2)
strSql = Replace(strSql, "+", "")
strSql = Replace(strSql, ";", ",")
hasIndex = True
Else
hasIndex = False
End If
td.Connect = kConnLux
td.RefreshLink
Debug.Print td.Name
If hasIndex And td.Indexes.count = 0 Then
' if index now removed then re-create it
CurrentDb.Execute strSql
End If
End If
Next td
Debug.Print "Done"
End Sub
Sub UpdateQueries()
Dim db As Database
Dim td As QueryDef
Set db = CurrentDb
For Each td In db.QueryDefs
If InStr(1, td.Connect, kOld) > 0 Then
td.Connect = kConnLux
Debug.Print td.Name, td.Connect
End If
Next td
End Sub
링크 된 테이블 관리자를 보았습니까? '비밀번호 저장'확인란이 있어야합니다. 사용할 수없는 경우 http://support.microsoft.com/?id=207823 – Fionnuala
@Reemou, 좋은 생각이지만 뷰에 연결된 링크 된 테이블의 문제를 참조하십시오. –
테이블이 많지 않은 경우 테이블을 삭제하고 적절한 DSN을 만든 후 다시 연결하십시오. –