2015-09-02 4 views
0

Я работаю над базой данных, чтобы организовать ресурс документов для назначенных читателей для легкого доступа и просмотра в моем офисе.Cascading Combo Box Query for Union Query

Я перешел в каскадный скелет со списком с here, и я надеюсь получить рецензентов и получателей для фильтрации документов в подформе в соответствии с критериями. Проблема в основном связана с тем, что моя организация оставляет меня иметь разветвленное, а затем линейное дерево отношений, а не прямое линейное дерево отношений. Есть много полезных советов, но я просто не могу получить правильную комбинацию из-за этого, чтобы разрешить свое препятствие.

Дерево взаимосвязей выглядит следующим образом Тип бумаги> Подкомитет> Сессия> Работы. Я остановился на этом, потому что пересматриваю документы из одного источника (международный ресурс), который имеет два типа бумаги (рабочий и неофициальный) и имеет несколько подкомитетов (мой офис интересуется только двумя комитетами).

Каскад работает нормально, подчиненное устройство изначально корректно заполняется из запроса, но при выборе параметров запрос не может соответствовать критериям, так как они являются поисковыми значениями.

Запрос идентифицирована как qrylstpapers содержит следующие поля:

PaperTypeName, SubCommitteeName, SessionNumber, PaperNumber, Title, Subject, Origin. 

Эти поля вытягиваются из таблиц PaperType подкомиссии, сессия, Papers

У меня есть два запроса, один для трудящегося и один для Неофициальные типы документов. У меня есть третий запрос для объединения двух.

Я думал, что запрос из запроса объединения упростит его, и, пока он заполняет подчиненную форму, сортировка не работает.

Команда Я использую в VBA для сортировки запроса запроса союза заключается в следующем:

Private Sub FilterPaperList() 

Dim strRS As String 

strRS = "SELECT qrylstpapers.Title, qrylstpapers.PaperTypeName FROM qrylstpapers" 

If Not IsNull(Me.cboPaperNumberAssign) Then 
    strRS = strRS & " WHERE PaperNumber = " & Me.cboPaperNumberAssign 
ElseIf Not IsNull(Me.cboSessionAssign) Then 
    strRS = strRS & " WHERE SessionNumber = " & Me.cboSessionAssign 
ElseIf Not IsNull(Me.cboSubCommitteeAssign) Then 
    strRS = strRS & " WHERE SubCommitteeName = " & Me.cboSubCommitteeAssign 
ElseIf Not IsNull(Me.cboPaperTypeAssign) Then 
    strRS = strRS & " WHERE PaperTypeName = " & Me.cboPaperTypeAssign 
End If 

strRS = strRS & " ORDER BY qrylstpapers.Title;" 

Me.lstPapers.RowSource = strRS 

Me.lstPapers.Requery 

End Sub 

Одна вещь, которую я действительно пытался что-то работал было указать «Me.cboPapertypeAssign.Column (1) », и в нем появится диалоговое окно с запросом на ввод данных, следующее с именем документа« WP »или« INF »даст мне соответствующую сортировку.

Любые мысли, понимание и/или общая критика будут высоко оценены. Даже если это перестройка отношений.

EDIT

Option Compare Database 
Option Explicit 

Private Sub cboAgency_AfterUpdate() 

    ' Set the Mode combo box to be limited by the selected Agency 
    Me.cboMode.RowSource = "SELECT tblMode.ModeID, tblMode.ModeName FROM tblMode " & _ 
    " WHERE AgencyID = " & Nz(Me.cboAgency) & _ 
    " ORDER BY ModeName" 
    Me.cboMode = Null 

    EnableControls 


End Sub 

Private Sub cboMode_AfterUpdate() 
    ' Set the Branch combo box to be limited by the selected Mode 
    Me.cboBranch.RowSource = "SELECT tblBranch.BranchID, tblBranch.BranchName FROM tblBranch " & _ 
    " WHERE ModeID = " & Nz(Me.cboMode) & _ 
    " ORDER BY BranchName" 
    Me.cboBranch = Null 

    EnableControls 



End Sub 

Private Sub cboBranch_AfterUpdate() 
    ' Set the Office combo box to be limited by the selected Branch 
    Me.cboOffice.RowSource = "SELECT tblOffice.OfficeID, tblOffice.OfficeNumber FROM tblOffice " & _ 
    " WHERE BranchID = " & Nz(Me.cboBranch) & _ 
    " ORDER BY OfficeNumber" 
    Me.cboOffice = Null 

    EnableControls 


End Sub 


Private Sub cboOffice_AfterUpdate() 
    ' Set the Reviewer combo box to be limited by the selected Office 
    Me.cboReviewer.RowSource = "SELECT tblReviewers.ReviewerID, tblReviewers.LastName FROM tblReviewers " & _ 
    " WHERE OfficeID = " & Nz(Me.cboOffice) & _ 
    " ORDER BY LastName" 
    Me.cboReviewer = Null 

    EnableControls 



End Sub 

Private Sub cboPaperTypeAssign_AfterUpdate() 
'Enable the SubCommittee Combo Box 
If Me.cboPaperTypeAssign.Column(1) = "WP" Then 
    Me.cboSubCommitteeAssign.RowSource = "SELECT tblUNWPSubCommittee.SubCommitteeID, tblUNWPSubCommittee.SubCommitteeName From tblUNWPSubCommittee " & _ 
     " Where PaperTypeID = " & Nz(Me.cboPaperTypeAssign) & _ 
     " ORDER BY SubCommitteeName" 
    Me.cboSubCommitteeAssign = Null 
ElseIf Me.cboPaperTypeAssign.Column(1) = "INF" Then 
    Me.cboSubCommitteeAssign.RowSource = "SELECT tblUNINFSubCommittee.SubCommitteeID, tblUNINFSubCommittee.SubCommitteeName From tblUNINFSubCommittee " & _ 
     " Where PaperTypeID = " & Nz(Me.cboPaperTypeAssign) & _ 
     " ORDER BY SubCommitteeName" 
    Me.cboSubCommitteeAssign = Null 
End If 

    EnableControls 
    FilterPaperList 

End Sub 

Private Sub cboSubCommitteeAssign_AfterUpdate() 
'Enable the Session Combo Box 
If Me.cboSubCommitteeAssign.Column(1) = "GHS" And Me.cboPaperTypeAssign.Column(1) = "INF" Then 
    Me.cboSessionAssign.RowSource = "SELECT tblUNINFSessions.SessionID, tblUNINFSessions.SessionNumber From tblUNINFSessions " & _ 
     " Where SubCommitteeID = " & Nz(Me.cboSubCommitteeAssign) & _ 
     " ORDER BY SessionNumber" 
    Me.cboSessionAssign = Null 
ElseIf Me.cboSubCommitteeAssign.Column(1) = "TDG" And Me.cboPaperTypeAssign.Column(1) = "INF" Then 
    Me.cboSessionAssign.RowSource = "SELECT tblUNINFSessions.SessionID, tblUNINFSessions.SessionNumber From tblUNINFSessions " & _ 
     " Where SubCommitteeID = " & Nz(Me.cboSubCommitteeAssign) & _ 
     " ORDER BY SessionNumber" 
    Me.cboSessionAssign = Null 
ElseIf Me.cboSubCommitteeAssign.Column(1) = "GHS" And Me.cboPaperTypeAssign.Column(1) = "WP" Then 
    Me.cboSessionAssign.RowSource = "SELECT tblUNWPSessions.SessionID, tblUNWPSessions.SessionNumber From tblUNWPSessions " & _ 
     " Where SubCommitteeID = " & Nz(Me.cboSubCommitteeAssign) & _ 
     " ORDER BY SessionNumber" 
    Me.cboSessionAssign = Null 
ElseIf Me.cboSubCommitteeAssign.Column(1) = "TDG" And Me.cboPaperTypeAssign.Column(1) = "WP" Then 
    Me.cboSessionAssign.RowSource = "SELECT tblUNWPSessions.SessionID, tblUNWPSessions.SessionNumber From tblUNWPSessions " & _ 
     " Where SubCommitteeID = " & Nz(Me.cboSubCommitteeAssign) & _ 
     " ORDER BY SessionNumber" 
    Me.cboSessionAssign = Null 
End If 

    EnableControls 
    FilterPaperList 
End Sub 

Private Sub cboSessionAssign_AfterUpdate() 

'Enable the Paper Number Combo Box 
If Me.cboSubCommitteeAssign.Column(1) = "GHS" And Me.cboPaperTypeAssign.Column(1) = "INF" Then 
    Me.cboPaperNumberAssign.RowSource = "Select tblUNINFPapers.ID, tblUNINFpapers.PaperNumber From tblUNINFPapers " & _ 
     " Where SessionID = " & Nz(Me.cboSessionAssign) & _ 
     " Order by PaperNumber" 
ElseIf Me.cboSubCommitteeAssign.Column(1) = "TDG" And Me.cboPaperTypeAssign.Column(1) = "INF" Then 
    Me.cboPaperNumberAssign.RowSource = "Select tblUNINFPapers.ID, tblUNINFpapers.PaperNumber From tblUNINFPapers " & _ 
     " Where SessionID = " & Nz(Me.cboSessionAssign) & _ 
     " Order by PaperNumber" 
ElseIf Me.cboSubCommitteeAssign.Column(1) = "GHS" And Me.cboPaperTypeAssign.Column(1) = "WP" Then 
    Me.cboPaperNumberAssign.RowSource = "Select tblUNWPPapers.ID, tblUNWPPapers.PaperNumber From tblUNWPPapers " & _ 
     " Where SessionID = " & Nz(Me.cboSessionAssign) & _ 
     " Order by PaperNumber" 
ElseIf Me.cboSubCommitteeAssign.Column(1) = "TDG" And Me.cboPaperTypeAssign.Column(1) = "WP" Then 
    Me.cboPaperNumberAssign.RowSource = "Select tblUNWPPapers.ID, tblUNWPPapers.PaperNumber From tblUNWPPapers " & _ 
     " Where SessionID = " & Nz(Me.cboSessionAssign) & _ 
     " Order by PaperNumber" 
End If 
    EnableControls 
    FilterPaperList 
End Sub 

Private Sub cboPaperNumberAssign_AfterUpdate() 
    ' Filter the list of papers based on the selection(s) 
    FilterPaperList 
End Sub 


Private Sub FilterPaperList() 

    Dim strRS As String 

'  Filter the list box appropriateley based on the combo box selection(s) 
    strRS = "SELECT qrylstpapers.Title, qrylstpapers.PaperTypeName FROM qrylstpapers" 

    If Not IsNull(Me.cboPaperNumberAssign) Then 
     strRS = strRS & " WHERE PaperNumber = " & Me.cboPaperNumberAssign 
    ElseIf Not IsNull(Me.cboSessionAssign) Then 
     strRS = strRS & " WHERE SessionNumber = " & Me.cboSessionAssign 
    ElseIf Not IsNull(Me.cboSubCommitteeAssign) Then 
     strRS = strRS & " WHERE SubCommitteeName = " & Me.cboSubCommitteeAssign 
    ElseIf Not IsNull(Me.cboPaperTypeAssign) Then 
     strRS = strRS & " WHERE PaperTypeName = " & Me.cboPaperTypeAssign 
    End If 

    strRS = strRS & " ORDER BY qrylstpapers.Title;" 

    Me.lstPapers.RowSource = strRS 

    Me.lstPapers.Requery 


End Sub 


Private Sub EnableControls() 

    ' Clear the Reviewer combo boxes 
    If IsNull(Me.cboAgency) Then 
    Me.cboMode = Null 
    End If 

    If IsNull(Me.cboMode) Then 
    Me.cboBranch = Null 
    End If 

    If IsNull(Me.cboBranch) Then 
    Me.cboOffice = Null 
    End If 

    If IsNull(Me.cboOffice) Then 
    Me.cboReviewer = Null 
    End If 

' Clear the PaperAssign combo boxes 
If IsNull(Me.cboPaperTypeAssign) Then 
    Me.cboSubCommitteeAssign = Null 
    End If 
If IsNull(Me.cboSubCommitteeAssign) Then 
    Me.cboSessionAssign = Null 
    End If 
If IsNull(Me.cboSessionAssign) Then 
    Me.cboPaperNumberAssign = Null 
    End If 

' Enable or disable Reviewer combo boxes based on whether the combo box preceeding it has a value. 

    Me.cboMode.Enabled = (Not IsNull(Me.cboAgency)) 
    Me.cboBranch.Enabled = (Not IsNull(Me.cboMode)) 
    Me.cboOffice.Enabled = (Not IsNull(Me.cboBranch)) 
    Me.cboReviewer.Enabled = (Not IsNull(Me.cboOffice)) 

' Enable or disable PaperAssign combo boxes based on whether the combo box preceeding it has a value. 

Me.cboSubCommitteeAssign.Enabled = (Not IsNull(Me.cboPaperTypeAssign)) 
Me.cboSessionAssign.Enabled = (Not IsNull(Me.cboSubCommitteeAssign)) 
Me.cboPaperNumberAssign.Enabled = (Not IsNull(Me.cboSessionAssign)) 

End Sub 


Private Sub Form_Load() 
    EnableControls 
    FilterPaperList 
End Sub 

ответ

0

Несколько вещей выделяются в вашем VBA запроса:

  1. Несколько экземпляров поле со списком не включены в логике;
  2. Строковые и числовые данные могут быть не полностью привязаны. Если SubCommitteeName и PaperTypeName не являются числовыми полями, их выражениям нужны одинарные кавычки;

Рассмотрим следующий пример, чтобы любое поле, чтобы быть сцеплены в WHERE заявлении (обратите внимание на, казалось бы, избыточную использование истинного заявления 1 = 1, который используется, чтобы начать конкатенации. Кроме того, я сломал ElseIfs, поскольку множество результатов должно быть возможным любая комбинация выбора combox box.

Private Sub FilterPaperList() 

Dim strRS As String 

strRS = "SELECT qrylstpapers.Title, qrylstpapers.PaperTypeName " _ 
      & " FROM qrylstpapers " _ 
      & " WHERE 1 = 1 " 

If Not IsNull(Me.cboPaperNumberAssign) Then 
    strRS = strRS & " AND PaperNumber = " & Me.cboPaperNumberAssign 
End if 
If Not IsNull(Me.cboSessionAssign) Then 
    strRS = strRS & " AND SessionNumber = '" & Me.cboSessionAssign 
End If 
If Not IsNull(Me.cboSubCommitteeAssign) Then 
    strRS = strRS & " AND SubCommitteeName = " & Me.cboSubCommitteeAssign & "'" 
End If 
If Not IsNull(Me.cboPaperTypeAssign) Then 
    strRS = strRS & " AND PaperTypeName = '" & Me.cboPaperTypeAssign & "'" 
End If 

strRS = strRS & " ORDER BY qrylstpapers.Title;" 

Me.lstPapers.RowSource = strRS  
Me.lstPapers.Requery 

End Sub 
+0

Я надеялся, что мне не придется публиковать все, сколько бы оно ни было, но код, на который вы потратили время, чтобы написать/изменить, не разрешает мою проблему. Итак, я добавил все к своему оригинальному сообщению. –