2010-12-29 2 views
6

사용자가 차량을 선택해야하는 양식 (FORM-A)이 있습니다. 사용자는 FORM-A에서 자동차 선택 버튼을 클릭해야합니다. 사용자가 차량을 선택할 수있는 곳에서 선택 양식 (FORM-B)을 열어야합니다. 선택한 값을 FORM-A로 다시 전달해야합니다.MS Access : 양식이 양식간에 서로 값을 교환하는 방법은 무엇입니까?

어떻게하면 MS Access 2010에서이 작업을 수행 할 수 있습니까?

FORM-B는 차량 사진 및 기타 정보가 포함 된 연속 양식입니다.

+0

하는 데 도움이

Private Sub imgVehicle_Click() If currentproject.allforms(“Form-A”).isloaded then Forms!Form-A!txtVehicle=me!txtVehicleName End if End Sub 

희망은 왜 당신은 팝업 형태로이 작업을 수행 할 수있는 권리 방법이라고 미리 결정? 기본 양식의 드롭 다운 목록은 어떻습니까? –

+0

나는 이것이 내가 처음에 한 일이라고 인정하지만, 이후 나는 선택 과정에서 차량의 그림을 포함시키고 자했다. 이 작업을 수행 할 수있는 목록 선택 컨트롤이 없으면 하위 폼 또는 팝업이 붙어 있습니다. 팝업은 선택이 확실한 것처럼 사용자를 느끼게하는 반면, 하위 양식 (연속 양식)은 선택이 실제로 발생했는지 의심스럽게 만듭니다. – cmaduro

답변

11

귀하의 질문에서 이해 한대로, 당신은 일종의 팝업을 열려고합니다. 팝업이 닫히면 해당 결과가 호출 양식에 저장됩니다.
솔루션 제안 :
a) 구문 docmd.openform "formB", windowmode:=acDialog을 사용하여 FormB를 엽니 다.
이렇게하면 formB가 닫히거나 숨겨 질 때까지 다음 줄의 실행을 막을 수 있습니다.
b) FormB의 확인 단추에서 양식을 숨기고 닫지 마십시오.
C) 코드가 견적에 다시 시작할 때, 당신은 이제

  1. 체크 formB은 여전히 ​​열려있는 경우. 그렇지 않으면,

그렇지 않으면 숨겨진 formB의 값 (열려), 다음 닫기 formB을 읽을 취소 된 것, 당신은 또한 formB 닫기 전에 견적에서 컨트롤을 업데이트해야 할 수 있습니다. 그러나 formB는 재사용 할 수 없기 때문에 formB와 formA 사이에 불필요한 종속성이 생기기 때문에이 접근법을 좋아하지 않습니다.

+1

별도의 대화 상자가 필요하다면 나에게로가는 길처럼 들립니다. –

+1

이런 종류의 것을 응용 프로그램 전체에서 호출 할 수있는 기능으로 바꾸십시오. 리턴하려는 각 필드가있는 유형을 선언하여이 함수가 복잡한 값 세트를 리턴하도록 할 수 있습니다. "유효"라고 불리는 값을 부울 값으로 남겨 두거나 작동하지 않거나 취소되었다고 말할 수 있습니다. – akc42

+1

이것은 제한된 시스템에 대한 훌륭한 솔루션입니다. 나는 과거에 (Me.OpenArgs를 사용하여) 호출하는 폼의 이름과 호출 된 폼의 숨겨진 필드를 반환 값을 저장하지만 폼을 열린 상태로 유지하고 false를 볼 수있는 상태로 유지하면 폼의 호출 코드가 다음과 같이 계속됩니다. 대화 상자가 닫혀 있으면 더 간단합니다! :) Thanks +1 – GazB

0

나는 왜 이것을 위해 별도의 양식이 필요한지 잘 모르겠다 - 첫 번째 텍스트 상자는 데이터베이스에있는 차량의 모든 레코드 목록이 될 것이다. 하나를 선택하면 나머지 차량 정보는 다음과 같다. 자동차 테이블에서 자동으로 채워지지만 부모 테이블에는 복사되지 않습니다. 물론, 나는 당신의 테이블 구조에 대해서도 확신하지 못하기 때문에이 방법에 대한 이유가 분명하지 않을 수 있습니다. 더 많은 차량을 추가하는 경우

방법의 장점

위, 선택 상자가 자동으로 업데이트됩니다 것을 - 당신은 당신이 최소 (항상 좋은 성능 이동)

0

당신이 할 수있는에로드 할 수있는 형태를 유지 formA 안에 formB의 인스턴스를 만들고 그것을 제어하십시오. 아래 formA에 대한 VBA 코드입니다. formA의 단추를 클릭하면 formB의 새 인스턴스를 만들고 포커스를줍니다. 동시에 컨트롤의 속성을 설정할 수 있습니다. 이 방법을 사용하여 양식 B에 대한 컨트롤에서 올바른 그림을 설정할 수 있습니다. 도움이 되길 바랍니다.

예 :

Option Compare Database 

Dim fB As Form_FormB 

Private Sub btnA_Click() 
    Set fB = New Form_FormB 
    fB.SetFocus 
    fB.tbxB.Text = "Some text sent from A to B!" 
End Sub 

당신이 두 형태가 항상 볼 수 있도록하려면

가, 난 그냥 모든 차량의 목록이있는 하위 폼을 사용하거나 제안은 사용자가 선택한 일에 대해 자세히 설명합니다.

0

양식을 form! formName! controlName 형식으로 참조 할 수 있습니다. 어떻게 작동하는지 알게되면 기존 설정과 함께 작동하도록 바보 취급 할 수 있습니다. 3 개의 컨트롤은 Form-A의 텍스트 상자, Form-B의 이미지 및 Form-B의 텍스트 상자를 사용합시다. Form-A의 텍스트 상자의 이름은 txtVehicle이고 Form-B의 이미지는 imgVehicle이며 Form-B의 텍스트 상자의 이름은 txtVehicleName입니다. 속성 내에 컨트롤의 이름을 설정할 수 있습니다. imgVehicle을 클릭하면 txtVehicleName의 값을 txtVehicle에 넣습니다.

약간 코딩해야합니다. 이전에 해보지 않았다면 쉽습니다. 이미지 속성에 이벤트가 표시됩니다. "On Click"이벤트를 클릭하면 드롭 다운 목록이 나타납니다. 선택 항목 중 하나는 [이벤트 프로 시저]입니다. 그 위에 3 개의 점이있는 작은 버튼도 행 끝에 나타납니다. 그것을 클릭하면 코드 창에 다음과 같은 코드가 표시됩니다.

Private Sub imgVehicle_Click() 

End Sub 

여기에 코드를 입력하십시오. 이런 식으로하면 효과가 있습니다. 이것은 가장 단순한 형태입니다.

Private Sub imgVehicle_Click() 
    Forms!Form-A!txtVehicle=forms!Form-B!txtVehicleName 
End Sub 

이제는 효과가 있지만이 방법으로 수행해야하는 몇 가지 사항이 있습니다. 우리는 Form-B를 직접 참조해야하므로 Form-A가 실제로 열려 있는지 확인해야합니다.

+0

집중된 요소 만 참조 할 수 있기 때문에 이것이 작동하지 않습니다. –

+0

요소 또는 양식을 참조하는 데 초점이 필요하지 않습니다. 양식은 열려 있어야하지만 보이지 않아도됩니다. 서브폼은 위에서 설명한대로 명시 적으로 참조되어야합니다. 텍스트 상자의 텍스트 속성과 같이 포커스 만 사용할 수있는 특정 속성이 있지만 소수에 있습니다. – Praesagus

+0

왜이 대답은 downvoted입니까? – Praesagus