드로우홀릭 더베이직

 

이 글은 Microsoft Access팀의 영문 블로그를 번역한 글입니다.

원문 링크: http://blogs.office.com/b/microsoft-access/archive/2012/08/03/how-to-automatically-relink-microsoft-access-tables-.aspx

 

1.jpg 작성자 소개: Patrick Wood, 게스트 블로거, Access MVP이며 Gaining Access Technologies(SQL Azure 및 Access 작업을 전문으로 하는 소프트웨어 회사)의 설립자 입니다. 또한 개발자를 위한 ‘액세스 및 SQL Azure 정보 센터’를 설립했습니다. 더 많은 정보를 원하시면 다음 이메일 주소로 연락 바랍니다.  patwood @ gainingaccess.net

역자 주: 프로그램 파일과 데이터베이스 파일
원문에서는 프론트엔드(front-end)와 백엔드(back-end)로 표시하고 있습니다. 그런데, 이것은 프로그래머의 전문 용어라, 일반 사용자들이 이해하기 어려울 수 있습니다.
액세스 데이터베이스를 공유할 때, 쿼리, 폼, 보고서를 모아서 프로그램 파일(프론트엔드)로 만들어 놓고, 테이블만 모아서 데이터베이스 파일(백엔드)로 만드는 경우가 있습니다. 이렇게 함으로써, 보다 나은 성능을 기대할 수 있기 때문입니다. 그래서 본 번역에서는 프로그램 파일과 데이터베이스 파일로 나누어 적용하였음을 말씀드립니다.

이 글에서는 간단한 코드 작성으로 자동으로 테이블을 재연결 하는 방법을 설명합니다(데이터베이스 파일이 다른 폴더로 이동된 상황에서 프로시저 하나를 호출 하여 연결하는 방식입니다. 이 프로시저는 다중 데이터베이스 파일 로 구성된 테이블도 재연결 합니다). 가장 큰 장점은 사용자가 코드를 작성하는 방법을 많이 알지 못해도 구현할 수 있는 것입니다.

테이블을 재연결하는 작업을 자동으로 처리하는 것은 매우 유용합니다. 데이터베이스를 배포하는 경우에 소모되는 시간 낭비(배포 시 발생하는 문제 해결 등)를 줄여줍니다. 직접 클라이언트 측에서 작업하거나, 원격으로 연결해서 작업 할 필요가 없습니다. 또한 데이터베이스 파일 또는 연결된 테이블의 이름을 입력 할 필요가 없습니다.

동작 방법

이 코드는 프로그램 파일의 TableDefs 컬렉션에서 중요한 정보를 추출하여 연결을 갱신하는 데 사용합니다. 이 정보에는 연결된 테이블 및 데이터베이스 파일의 이름이 포함되어 있습니다. 이 정보와 프로그램 파일 데이터베이스의 기존 경로를 사용하여 “TableDef 연결 속성” 설정에 필요한 문자열을 얻습니다. TableDefs 컬렉션을 반복하며 “TableDef RefreshLink 메소드(Method)”를 통해 연결을 갱신합니다.

다음은 어떻게 작동할 지를 기술한 것입니다.

  • 데이터베이스 파일과 프로그램 파일이 같은 폴더에 있는 경우 연결된 모든 액세스 데이터베이스 테이블을 재연결 합니다.
  • 데이터베이스를 다른 폴더 또는 다른 컴퓨터로 이동하는 경우 테이블을 재연결 합니다.
  • 다중 데이터베이스 파일 테이블을 재연결 합니다.
  • 데이터베이스나 테이블을 저장하거나 이름을 입력 할 필요가 없습니다.
  • 오류가 있을 경우에도 연결된 테이블 또는 TableDef가 삭제되지 않습니다.

다음은 코드가 동작하지 않는 상황입니다.

  • 기존에 연결되었던 적이 없는 액세스 데이터베이스 테이블을 재연결 하지 않습니다.
  • 이름이 변경되었거나 데이터베이스 파일로 이동되었을 경우 테이블의 연결을 갱신하지 않습니다.
  • 이름이 변경된 데이터베이스 파일의 테이블 연결은 재연결 하지 않습니다.
  • ODBC, 엑셀, 아웃룩, dBase, Paradox 또는 연결된 테이블 또는 개체를 재연결 하지 않습니다.

 

요구 사항:

1) 프로그램 파일 및 데이터베이스 파일이 같은 폴더에 있어야 합니다.
이 요구 사항이 충족되면 파일이 어떤 폴더 또는 다른 컴퓨터라도 이동 할 수 있으며, 코드가 자동으로 테이블을 재연결 합니다.

2) ‘RefreshTableLinks 프로시저’ 호출 코드는 실행될 첫번째 폼의 오픈 이벤트에 추가하거나 AutoExec 매크로에 의해 호출되야 합니다.
이 기능이 제대로 동작하도록 하려면, 이 코드가 바운드 폼에서 (테이블의) 데이터를 불러오기 전에 실행히켜야 합니다.
(역자 주: Splash 폼이란? - 로그온 폼, 시작폼 같이 데이터베이스가 시작할 때 처음으로 표시되는 폼을 말합니다.)

 

테이블 재연결 펑션:

'----------------------------------------------------------------------------
' Procedure: RefreshTableLinks
' Purpose: Refresh table links to back-ends in the same folder as front end.
' Note: Linked Tables can be in more than one back-end.
' Return: Returns a zero-length string if all tables are relinked.
' Return: Or returns a string listing tables not relinked and errors.
'----------------------------------------------------------------------------

Public Function RefreshTableLinks() As String
On Error GoTo ErrHandle

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strCon As String
Dim strBackEnd As String
Dim strMsg As String
Dim intErrorCount As Integer

Set db = CurrentDb

'Loop through the TableDefs Collection.
For Each tdf In db.TableDefs
'Verify the table is a linked table.
If Left$(tdf.Connect, 10) = ";DATABASE=" Then
'Get the existing Connection String.
strCon = Nz(tdf.Connect, "")
'Get the name of the back-end database using String Functions.
strBackEnd = Right$(strCon, (Len(strCon) - (InStrRev(strCon, "\") - 1)))
'Verify we have a value for the back-end
If Len(strBackEnd & "") > 0 Then
'Set a reference to the TableDef Object.
Set tdf = db.TableDefs(tdf.Name)
'Build the new Connection Property Value.
tdf.Connect = ";DATABASE=" & CurrentProject.Path & strBackEnd
'Refresh the table link.
tdf.RefreshLink
Else
'There was a problem getting the name of the back-end.
'Add the information to the message to notify the user.
intErrorCount = intErrorCount + 1
strMsg = strMsg & "Error getting back-end database name." & vbNewLine
strMsg = strMsg & "Table Name: " & tdf.Name & vbNewLine
strMsg = strMsg & "Connect = " & strCon & vbNewLine
End If
End If
Next tdf

ExitHere:
On Error Resume Next
If intErrorCount > 0 Then
strMsg = "There were errors refreshing the table links: " _
& vbNewLine & strMsg & "In Procedure RefreshTableLinks"
RefreshTableLinks = strMsg
End If
Set tdf = Nothing
Set db = Nothing
Exit Function

ErrHandle:
intErrorCount = intErrorCount + 1
strMsg = strMsg & "Error " & Err.Number & " " & Err.Description
strMsg = strMsg & vbNewLine & "Table Name: " & tdf.Name & vbNewLine
strMsg = strMsg & "Connect = " & strCon & vbNewLine
Resume ExitHere

End Function

위 프로시저는 오류가 발생했을 경우에만 메시지를 반환합니다. 이 경우 데이터베이스를 열 때마다 팝업 되는 MsgBox 대신 “직접 실행 창”에 테이블 재연결 성공 여부를 기록 할 수 있습니다. 테이블 재연결이 하나 이상 실패하거나 오류가 있는 경우 팝업으로 사용자에게 알리려면 MsgBox를 사용하도록 코드를 구성하면 됩니다. 

아래의 코드는 프로시저를 호출하고 오류를 표시 할 때 MsgBox를 사용하는 방법을 보여줍니다.
Dim strMsg As String

'Run the Procedure, getting any error messages.
strMsg = RefreshTableLinks()

'strMsg will be a zero-length string if there is no error message.
If Len(strMsg & "") = 0 Then
Debug.Print "All Tables were successfully relinked."
Else
'Notify the user of the errors.
MsgBox strMsg, vbCritical
End If

이 프로시저를 데이터베이스를 열 때 마다 실행되게 하는 것이 좋습니다. 표준 모듈에서 RefreshTableLinks 펑션을 넣어 프로시저를 호출 할 수 있는 코드를 추가하기만 하면 됩니다. 테이블 재연결이 실패하거나, 데이터베이스의 손상이 생기거나(아주 드믄 케이스입니다.) 파일 중 하나를 다른 폴더로 옮기려 하거나 데이터베이스 파일의 이름을 변경하고자 하기 전까지는 알아서 테이블을 재연결 해줍니다.

이 코드는 프로그램 파일에 연결 된 데이터베이스 테이블만을 액세스에 연결합니다. 자세한 내용을 보시려면 액세스 2010 또는 액세스 2007의 “DAO TableDef 연결 속성”과 “DAO TableDef RefreshLink 메소드”에 대해 읽어 보면 됩니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 액세스-일반 길벗출판사 / 액세스 2013 무작정 따라하기 정오표 돌직구 2014-10-09 57663
공지 액세스-일반 길벗출판사 / 액세스 2010 무작정 따라하기 정오표 file 돌직구 2012-10-26 108833
23 IT일반 우편번호 DB 2014-03-07, 도로명 주소 포함 돌직구 2014-03-12 19634
22 IT일반 Windows 8에서 드래그 & 드롭이 되지 않을 때 file 윈드님 2013-09-12 27137
21 IT일반 맥북을 업무용으로 구입하고 싶으세요? 돌직구 2013-09-04 19005
20 MS액세스 블로그 번역 액세스(Access) 2013으로 업무용 앱을 만드는 4가지 방법 file 윈드님 2013-07-13 29044
19 MS액세스 블로그 번역 쉬운 데이터 입력 file 윈드님 2013-06-18 25328
18 IT일반 Dropbox 동기화 vs. SkyDrive Pro 동기화 돌직구 2013-06-06 15673
17 SQL Server SQL Server Express 버전별 DB 용량 1 돌직구 2013-05-30 27756
16 ADP 액세스와 SQL Server 간의 데이터 형식 호환표 돌직구 2013-05-14 15775
15 MS액세스 블로그 번역 액세스(Access) 2013 과 SQL 서버(SQL Server) file 윈드님 2013-05-13 23754
» MS액세스 블로그 번역 액세스(Access) 테이블, 자동으로 재연결하기 file 1 윈드님 2013-05-02 20026
13 MS액세스 블로그 번역 액세스(Access) 2013 웹 앱 만들기 file 윈드님 2013-04-18 26422
12 MS액세스 블로그 번역 액세스(Access) 2013 소개 file 윈드님 2013-04-15 19333
11 액세스-일반 한/영 자동 전환 (IME 모드 속성) file 돌직구 2013-04-12 14588
10 액세스-일반 탐색 컨트롤 돌직구 2012-07-17 14571
9 액세스-일반 피벗 테이블 돌직구 2012-07-17 14238
8 액세스-일반 피벗 테이블 / 피벗 차트 개요 돌직구 2012-07-17 15097
7 액세스-일반 특정 데이터베이스에만 반영되는 메뉴 만들기 file 돌직구 2012-07-17 12658
6 액세스-일반 ID와 암호 기반의 로그인 기능 돌직구 2012-07-17 13461
5 액세스-일반 작성자, 작성일시, 수정자, 수정일시 이력 관리 file 돌직구 2012-05-16 28790


  주소  05854 서울시 송파구 법원로 128 문정 SK V1 C동 1314호 ㈜팀데이터이십일  |  고객센터 전화번호  02-467-2998  |  대표이사  염기웅
개인정보관리책임자  염기웅 (ml_privacy@td21.com)  |  사업자등록번호  120-86-79260  |  통신판매업신고번호  제 2018-서울송파-1565 호
  TD21의 사전 서면 동의 없이 TD21 사이트 일체의 정보, 콘텐츠 및 UI 등을 상업적 목적으로 전시, 전송, 스크래핑 등 무단 사용할 수 없습니다.