2011-07-05 4 views
0

제 아내는 다음 코드를 작성했으며 조직에서 Access 2007을 사용했을 때 제대로 작동했습니다. Access 2010으로 업데이트되어 더 이상 작동하지 않습니다. Access에 익숙하지 않지만 Stack에 제시하여 Access 2010에서 작동하지 않는 항목을 볼 수 있는지 확인해 보겠다고 제안했습니다. 통찰력을 미리 알려 주셔서 감사합니다.VBA 코드는 Access 2007에서 작동하지만 Access 2010에서는 작동하지 않습니다.

Private Sub Originating_Zone_AfterUpdate() 

Dim EscortDB As DAO.Database 

Dim rstBldgs As DAO.Recordset 

Set EscortDB = CurrentDb() 
Set rstBldgs = EscortDB.OpenRecordset("SELECT BuildingName FROM" & _ 
" ZoneBldgLookup WHERE ZoneLocation = '" & _ 
Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
"' ORDER BY BuildingName", [dbOpenDynaset]) 


rstBldgs.MoveLast 

rstBldgs.MoveFirst 

Do Until rstBldgs.EOF 
Forms!DateID!EscortIDSubform.Form.[Pick Up Location].AddItem rstBldgs!BuildingName 
rstBldgs.MoveNext 
Loop 

rstBldgs.Close 


End Sub 

업데이트 :는 그녀는 다음과 같은 코드를 사용하여 작업을 얻었다. 당신의 도움을 주셔서 감사합니다!

Private Sub Originating_Zone_AfterUpdate() 

Dim sBuildList As String 

sBuildList = ("SELECT BuildingName FROM" & _ 
" ZoneBldgLookup WHERE ZoneLocation = '" & _ 
Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
"' ORDER BY BuildingName") 

Forms!DateID!EscortIDSubform.Form.[Pick Up Location].RowSource = sBuildList 
Forms!DateID!EscortIDSubform.Form.[Pick Up Location].Requery 

End Sub 
+0

이 함수는 이전 드롭 다운 목록 (ZoneBldgLookup)의 입력을 기반으로 테이블에서 만든 레코드 세트를 사용하여 드롭 다운 메뉴를 채우는 데 사용 된 것 같습니다. 연결된 선택기. 두 번째 드롭 다운 메뉴가 더 이상 채워지지 않습니다. 어떤 오류도 발생시키지 않습니다. 32 비트입니다. – Mobius

+1

그것은 액세스 응용 프로그램입니다 - 연결 문자열은 의미가 없습니다. –

답변

1

@ David-W-Fenton의 제안 외에도 SELECT 문을 보유하기 위해 문자열 변수를 사용해야한다고 생각합니다. 그런 다음 디버그 할 수 있습니다. 직접 실행 창에 인쇄, 새 쿼리 (SQL보기에서) 복사 및 실제로 행을 반환하는지 확인하십시오. 또한

Dim strSql As String 
strSql = "SELECT BuildingName FROM" & _ 
    " ZoneBldgLookup WHERE ZoneLocation = '" & _ 
    Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
    "' ORDER BY BuildingName" 
Debug.Print strSql 
Forms!DateID!EscortIDSubform.Form.[Pick Up Location].Rowsource = strSql 

이 코드는 DateID라는 형태의 모듈에있는 경우, 당신은 속기는 "양식"... 당신이있는 코드를 포함하는 형태입니다 키워드 Me (와 Forms!DateID을 대체 할 수 달리는). 극적으로 짧지는 않지만 양식을 다시 지정하면 Me을 변경할 필요가 없습니다. 아직 큰 문제가 아닙니다 ... 도로를 따라 가야 할 세부 사항은 하나도 없습니다.

+0

그녀는 "페이지에서 두 번째 녀석의 제안을 사용했지만 작동하도록 행 소스 유형을 변경해야했습니다. 2010 년이나 다른 방법으로 행 소스 유형을 다르게 설정할 필요가 있었지만 레코드 세트를 작성하는 대신 목록을 문자열로 정의하고 작업을 완료 한 후에 다시 추가해야 계속 추가 할 수 있습니다 (생각하지 않았지만 시도하지 않았 음). 도와 줘서 고마워! – Mobius

+0

예, 콤보 상자/목록 상자의 rowsource를 할당 할 때 SQL 문자열 인 경우 .AddItem을 사용할 때와 다른 유형이어야합니다. 그래도 Rowsource를 설정하면 쿼리가 완전히 중복 될 수 있습니다. –

3

끔찍한 코드입니다. 레코드 세트 및 .AddItem을 이동하여 드롭 다운 목록 또는 목록 상자를 채우는 것은 대단히 비효율적입니다. 콤보 상자/목록 상자의 Rowsource 속성에 SQL 문자열을 할당하면 코드없이 모든 작업을 수행 할 수 있습니다.

이제이 AfterUpdate 이벤트가 첨부 된 컨트롤의 선택 항목에 따라 목록이 변경되지만이 모든 경우에이 이벤트에 Rowsource를 할당한다는 의미입니다. 나는 코드 (I이 진행 샌드 박스 모드/매크로 보안 문제가있다 생각)하지만 방법이 더 작동하지 않는 잘못 무슨 말을 할 수

Forms!DateID!EscortIDSubform.Form.[Pick Up Location].Rowsource = "SELECT BuildingName FROM" & _ 
    " ZoneBldgLookup WHERE ZoneLocation = '" & _ 
    Forms!DateID!EscortIDSubform.Form.[Originating Zone] & _ 
    "' ORDER BY BuildingName" 

: 아마, 위의 모든 코드는이 교체 될 수 있습니다 필요 이상의 코드 행.

+0

그녀는 작동하도록했습니다! 당신의 도움을 주셔서 감사합니다! – Mobius