2016-09-28 5 views
1

를 연결된 모든 테이블 참조를 업데이트 :가 프로그래밍 방식으로 나는 MS Accecss 데이터베이스 파일/60 개 테이블의 연결된 테이블 참조를 업데이트 능가하려는 MS에 액세스

enter image description here

그러나 나는 싶지 않아 "F를"... "에서"E : ... "

이 대량 재 할당 프로그래밍 할 수있는 방법

+1

내가 알고있는 유일한 프로그래밍 방식은 연결된 모든 테이블을 삭제하고 다시 링크하는 것입니다. 아마도 시스템 테이블에서 연결된 테이블과 해당 속성을 읽을 수있는 방법이 있기 때문에이를 사용할 수는 있지만 결코 해 본 적이 없습니다. 체크 아웃 : http://stackoverflow.com/questions/25579591/get-the-name-of-local-table-and-linked-table-in-vba – SunKnight0

답변

0
파일 경로로 수동으로 모두 60로 갈 것입니다 단순히 변경해야합니다.?

다음 코드는 3 가지를 수행합니다 :

  1. 현재 데이터베이스의 위치를 ​​기반으로 "연결된 테이블 원본"테이블에서 연결된 테이블의 경로를 가져옵니다. 가끔 내 로컬 드라이브에 있고 때로는 네트워크 서버에있는 경우가 있습니다.
  2. 소스 db에 대한 참조를 업데이트합니다. 모든 응용 프로그램에서 사용하기 위해 하나의 복사본을 유지할 수있는 라이브러리에 공통 코드를 저장합니다.
  3. 테이블에 정의 된 소스로 모든 연결된 테이블을 업데이트하지만 테이블에 대한 "공통 테이블"로 DB에 좋아
Function relink_tables() 

If Left(CurrentDb().Name, 2) = "C:" Or Left(CurrentDb().Name, 2) = "B:" Then 
    Source = "local" 
    Else: Source = "network" 
    End If 
Set rs = CurrentDb.OpenRecordset("select * from [linked table source] where source='" & Source & "'") 
Source = rs.Fields("path") 

For Each R In References 
    If InStr(R.Name, "Common Tables") > 0 Then Application.References.Remove R 
    Next R 
Application.References.AddFromFile Source 

x = 0 
Set TDefs = CurrentDb().TableDefs 
For Each table In TDefs 
    If InStr(table.Connect, "Common Tables") = 0 Then GoTo NT 
    table.Connect = ";DATABASE=" & Source 
    table.RefreshLink 
    x = x + 1 
NT: 
    Next table 
Finish: 
MsgBox "remapped " & x & " tables" 
End Function 
+0

테이블 위치 ":"연결된 테이블 소스 " – Sauron

+0

이 코드를 실행하는 현재 db에 있습니다. 필드는 원본과 경로이며 원본은 "로컬"또는 "네트워크"이고 경로는 연결된 테이블의 원본 db에 대한 전체 경로입니다. 같은 위치에 항상 링크하거나 msgbox가 위치를 물어 보는 경우 –

+0

@Don George : 모든 테이블을 같은 소스에 연결하지 않습니까? – Johanness

2

이것이 하나의 샷 이름? 그렇다면,이 과잉 될 수 있으며 poerfection하는 데 시간이 걸릴 것입니다,하지만 위쪽에, 당신은 늘 당신의 참조를 유지하기 위해 별도의 테이블이 필요 당신은 VBA 잘 알고있는 경우는 다음과 같이 사용할 수 있습니다

Dim td As DAO.TableDef 
Dim strPath as string 

For Each td In CurrentDb.TableDefs 
    If (td.Attributes And dbAttachedTable) = dbAttachedTable Then 
     strPath = Mid(td.Connect, 11) 
     If Left(strPath, 1) = "E" Then 
      strPath = "F" & Mid(strPath, 2) 
      td.Connect = ";DATABASE=" & strPath 
      td.RefreshLink 
     End If 
    End If 
Next 

암호가없는 ODBC- 데이터베이스 용입니다. 연결 문자열이 더 복잡하면 조정해야합니다. 가능한 모든 연결 문자열 목록은 다음과 같습니다. Microsoft DAO Connection Strings