2014-11-11 5 views
0

사용자가 11 개의 다른 데이터베이스를 열고 작업해야하는 문제를 '합리화'하는 과정에 있습니다. 모든 것이 11 개 데이터베이스 모두에서 동일합니다. 원래 아이디어는 데이터를 분리 된 상태로 유지하는 것이 었습니다. 이제 회사는 차례를 밟았습니다.바운드 컨트롤에서 MS Access 변경 테이블

  1. 앱의 두 가지 형태가있다 - 첫 번째 형태는 '클릭'사용자에 다음 몇 가지 기본적인 데이터를 수집 실제 작업이 완료 두 번째 폼을 엽니 다. 쿼리 + where 절은 '기본 폼'의 레코드 원본입니다.

  2. 각 데이터베이스에는 몇 가지 테이블이 있으며, 대부분 테이블은 룩업 테이블입니다. eacgh db의 키 데이터 테이블을 "Main Table"이라고합니다.

  3. BE/FE 디자인이 없습니다.

내가 "01MAIN"같이 (표 번호 + 홈페이지와 각 테이블의 이름을 변경, 룩업 테이블과 11 '메인 테이블'로 구성된 하나의 백 엔드를 작성하면된다 싶습니다, "02MAIN"등) 첫 x 째 양식에서 사용자는 목표 테이블을 선택하고 기본 양식이 중요한 정보로로드됩니다.

사용자가 작업 할 테이블을 결정할 때 쿼리에서 테이블 별칭을 사용하여 기본 폼의 여러 바인딩 된 텍스트 상자 및 확인란에 방해가되지 않도록 할 수 있다고 생각했습니다. 즉, '실제'테이블이 "01MAIN"또는 "02MAIN"이더라도 바인딩 된 컨트롤이 "MAIN TABLE"을 보길 원합니다.

이 작업이 가능합니까? 그렇다면 기본 폼을 구동하는 Open Form 매크로에서 쿼리 + 필터를 사용하여 테이블 선택을 반영하도록 업데이트하는 방법 또는 아마도이 방법은 작동하지 않을 수 있습니다.

아이디어가 도움이 될 것입니다.

답변

0

쿼리 SQL을 사용하여 재생하는 대신 RecordSource 속성을 교체하여이 작업을 수행 할 수 있습니다. 모든 관련 테이블 이름을 가진 기본 폼에 콤보 박스를 가질 수 있습니다. 주 폼에는 첫 번째 테이블 (01MAIN)의 기본 RecordSource가있을 수 있으므로 끊어진 된 필드가 없으며 콤보 상자가 업데이트되면 해당 테이블의 RecordSource가 해당 테이블로 업데이트됩니다.

Private Sub Form_Load() 

    Dim db As DAO.Database 
    Dim tbl As DAO.TableDef 
    Dim strTableNames As String 

    Set db = CurrentDb() 

    For Each tbl In db.TableDefs 
     If tbl.Name Like "??MAIN" Then 
      strTableNames = strTableNames & tbl.Name & ";" 
     End If 
    Next 

    Me.cmbTables.RowSource = strTableNames 

    Set tbl = Nothing 
    Set db = Nothing 

End Sub 

이 : - 귀하의 기본 폼에이 코드를 부착, cmbTables라고 테이블 이름을 가지고있는 콤보 상자의 이름을 가정 그래서 예를 들면

는 (그냥 빨리 데모 오류 처리가 없습니다) cmbTables에 데이터베이스의 xxMAIN처럼 보이는 모든 테이블 이름이 채워집니다. 그런 다음 cmbTables 대한 AfterUpdate 이벤트에이 첨부 : 새 값을 선택하면

Private Sub cmbTables_AfterUpdate() 
    Me.RecordSource = cmbTables.Value 
End Sub 

이것은 콤보 상자에서 선택한 테이블 폼의 레코드 원본을 변경합니다. 이제 모든 바운드 필드 이름이 같으면이 작업을 투명하게 수행 할 수 있어야하며 새 테이블 데이터를 반영하도록 양식을 업데이트해야합니다. 필요한 경우 테이블 이름 대신 QueryDef 이름을 사용하여이를 수행하는 방법을 알아낼 수 있습니다. 빠른 테스트에서 저를 위해 일했습니다.

관련 문제