2012-12-07 4 views
1

MS Access는 테이블 연결에 대한 절대 주소 지정 만 허용하고이 문제에 대한 유일한 해결 방법은 VBA 코드를 사용하는 것이 었음을 알고 나면이를위한 방법을 코딩하기 시작했습니다. 비교적 간단한 코드를 발견하고 아래에서 볼 수있는 내 목적에 맞게 수정했습니다. 그러나이 방법에는 2 가지 주요 문제점이있는 것으로 보입니다.Microsoft Access 2010 상대 주소 문제

1 - Excel Spreedsheets를 연결하는 것처럼 보이지 않습니다. 처음 시도하면 전체 모듈이 손상 될 수 있습니다. 그들을 연결하는 방법이 있습니까?

2 - 더 중요한 것은 파일이 열릴 때마다 파일의 크기가 증가하고 데이터베이스에 대한 유일한 수정은 모듈 내에 코드가 추가 된 것입니다. 나는 그것이 파일을 열 때 자동으로 실행되도록하고 닫은 후에 몇 백 킬로바이트만큼 크기가 증가한 것을 알았다. 어느 것이 방해가되는지.

또한이 작업을 수행하는 더 좋은 방법이 있다면 그 작업을 보는 데 매우 흥미가 있습니다.

Public Sub RelinkTables(newPathName As String, backEnd As String, excel1 As String, excel2 As String) 
Dim Dbs As Database 
Dim Tdf As TableDef 
Dim Tdfs As TableDefs 
Set Dbs = CurrentDb 
Set Tdfs = Dbs.TableDefs 
'Loop through the tables collection 
    For Each Tdf In Tdfs 
    If Tdf.SourceTableName <> "" Then 'If the table source is other than a base table 
     If Tdf.SourceTableName = "CClas$" Or Tdf.SourceTableName = "Sheet1$" Then 

     Else 
      Tdf.Connect = ";DATABASE=" & newPathName & backEnd 'Set the new source 
      Tdf.RefreshLink 'Refresh the link 
     End If 
    End If 
Next 'Goto next table 

End Sub 

Function ReLinker() 
Dim currPath As String 
Dim backEnd As String 
Dim excel1 As String 
Dim excel2 As String 
currPath = CurrentProject.Path 
Debug.Print currPath 
backEnd = "\backEnd.accdb" 
excel1 = "\excel1.xls" 
excel2 = "\excel2.xls" 

RelinkTables currPath, backEnd, excel1, excel2 
End Function 

답변

1

의미가 있습니다

"파일의 크기는 열려마다 증가". 다시 연결하면 일반적으로 DB 파일의 크기가 커집니다. 그리고 db를 열 때마다 다시 링크하기 때문에 크기가 증가 할 것으로 예상됩니다. 압축을 수행하여 db 파일을 다시 축소합니다.

그러나 기존 링크를 검토하고 변경해야하는 경우에만 다시 링크를 수행합니다.

또한 링크를 다시 진행하기 전에 링크 파일 대상이 있는지 확인하는 것이 좋습니다. 다음 중 하나에 구축 할 수있는 경우

엑셀 링크는
If Len(Dir(currPath & backEnd)) = 0 _ 
     Or Len(Dir(currPath & excel1)) = 0 _ 
     Or Len(Dir(currPath & excel2)) = 0 Then 
    MsgBox "Oops!" 
End If 

, 나는 아직도 그러나 문제가 발생 엑셀 링크에 대한 응답에서, ... 조언을

? CurrentDb.TableDefs("tblExcelData").Connect Like "Excel*" 
True 
? CurrentDb.TableDefs("tblExcelData").Connect 
Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\share\Access\temp.xls 
? Split(CurrentDb.TableDefs("tblExcelData").Connect, "DATABASE=")(1) 
C:\share\Access\temp.xls 
+0

감사를 참조 . 나는 테이블 데이터베이스를 올바른 위치로 유도 할 수 있지만 액세스 데이터베이스가 손상된 링크를 새로 고침하려고 할 때마다. 또한 VBA에 익숙하지 않은 (보통 Java로 작업합니다) Like와 Split을 사용하는 첫 번째 줄과 마지막 줄에서 무엇을 할 지 모르겠습니다. – varilight

+0

또한 링크가 여전히 작동하는지 확인하는 데 사용할 수있는 TableDef 속성이 있습니까? 현재 링크가 계속 작동 하는지를 검사하는 유일한 방법은 파일이 존재하는지 여부를 확인하는 것입니다. – varilight

+0

링크가 작동하는지 여부를 나타내는 TableDef 속성을 알지 못합니다. 파일이 존재하는지 검사하는 것을 피하려면 링크 된 테이블을 조회하거나'DCount()'표현식을 사용할 수 있습니다. 'Like '와'Split()'에 관해서는, Access 온라인 도움말에서 "Like Operator"와 "Split Function"을 확인하십시오. – HansUp