MS-Access, как использовать запрос с параметром внутри формы - PullRequest
0 голосов
/ 10 июня 2011

У меня есть SQL-запрос с вопросом (как предупреждение), который появляется каждый раз, когда я его открываю ...

Для каждого значения, вставленного в этот вопрос, вы получаете разные результаты.

Я хочу иметь возможность использовать этот запрос в моей форме со списком ...

Я не знаю, как вывести запрос с параметром из формы ....

У меня нет проблем с использованием VBA, просто скажите, как вызвать запрос с параметром

Спасибо, Fingerman

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Я обычно использую свои формы фильтрации, используя следующие принципы:

1) Сначала я создаю запрос, который включает в себя все поля, которые я хочу отобразить, и все поля, по которым я хочу фильтровать.Можно использовать более одной таблицы.Я не устанавливаю никаких критериев (предложение WHERE) в этом запросе, если нет условия, которое всегда нужно применять, несмотря ни на что.

2) Затем я создаю форму таблицы данных на основе этого запроса и сохраняю ее, присвоив ему имя, указывающее, что это подчиненная форма.

3) Затем я создаю несвязанную основную форму и добавляю несвязанные элементы управления, такие как текстовые поля, комбо, списки, флажки и т. д., которые будут использоваться для фильтрацииразные поля.Один элемент управления может потенциально позволить пользователю выполнять поиск по нескольким полям в зависимости от того, как вы пишете свою процедуру фильтрации в VBA.

4) Теперь пришло время написать код в главной форме, чтобы все это работало.По сути, код должен проверить, есть ли значения в каком-либо из элементов управления, и если это так, он создает предложение WHERE (без ключевого слова WHERE) и в самом конце устанавливает свойство фильтра подчиненной формы и поворачивает свойство FilterOn подчиненной формы.TRUE.

Вот пример кода.Это было взято из примера базы данных, которую я сделал только для демонстрации фильтрации (см. Ниже).В этом примере не используются нечеткие поиски (звездочки), и каждый элемент управления в главной форме фильтрует только одно поле в подчиненной форме.

Private Sub cmdFilter_Click()
    'You can also call the FilterSubForm function on a control's AfterUpdate event.
    Call FilterSubform
End Sub

Private Sub FilterSubform()

    Dim strFilter As String

    'Note: We have to wrap field names in brackets if they contain spaces or
    'special characters. These fields are in Northwind Traders 2007 from Microsoft
    'I would never consider naming my fields with spaces or special characters
    'in them.

    'Company
    If Nz(Me.txtCompany, "") <> "" Then
        strFilter = strFilter & "Company = '" & PQ(Me.txtCompany) & "' And "
    End If
    'First Name
    If Nz(Me.txtFirstName, "") <> "" Then
        strFilter = strFilter & "[First Name] = '" & PQ(Me.txtFirstName) & "' AND "
    End If
    'Last Name
    If Nz(Me.txtLastName, "") <> "" Then
        strFilter = strFilter & "[Last Name] = '" & PQ(Me.txtLastName) & "' AND "
    End If
    'Business Phone
    If Nz(Me.txtBusinessPhone, "") <> "" Then
        strFilter = strFilter & "[Business Phone] = '" & PQ(Me.txtBusinessPhone) & "' AND "
    End If
    'City
    If Nz(Me.cboCity, "") <> "" Then
        strFilter = strFilter & "City = '" & PQ(Me.cboCity) & "' AND "
    End If
    'State/Province
    If Nz(Me.cboStateProvince, "") <> "" Then
        strFilter = strFilter & "[State/Province] = '" & PQ(Me.cboStateProvince) & "' AND "
    End If
    'Order Date
    If Nz(Me.txtOrderDate, "") <> "" Then
        If IsDate(Me.txtOrderDate) = True Then
            strFilter = strFilter & "[Order Date] = #" & Me.txtOrderDate & "# AND "
        End If
    End If
    'Ship Name
    If Nz(Me.txtShipName, "") <> "" Then
        strFilter = strFilter & "[Ship Name] = '" & PQ(Me.txtShipName) & "' AND "
    End If
    'Ship City
    If Nz(Me.txtShipCity, "") <> "" Then
        strFilter = strFilter & "[Ship City] = '" & PQ(Me.txtShipCity) & "' AND "
    End If
    'Ship State/Province
    If Nz(Me.cboShipStateProvince, "") <> "" Then
        strFilter = strFilter & "[Ship State/Province] = '" & PQ(Me.cboShipStateProvince) & "' AND "
    End If
    'Product Code
    If Nz(Me.cboProductCode, "") <> "" Then
        strFilter = strFilter & "[Product Code] = '" & PQ(Me.cboProductCode) & "' AND "
    End If
    'Quantity
    If Nz(Me.txtQuantity, "") <> "" Then
        If IsNumeric(Me.txtQuantity) = True Then
            strFilter = strFilter & "Quantity = " & Me.txtQuantity & " AND "
        End If
    End If

    If Right(strFilter, 5) = " AND " Then strFilter = Left(strFilter, Len(strFilter) - 5)

    If strFilter <> "" Then
        Me.subformOrderSearch.Form.Filter = strFilter
        Me.subformOrderSearch.Form.FilterOn = True
    Else
                   'Clear the filter
        Me.subformOrderSearch.Form.Filter = ""
        Me.subformOrderSearch.Form.FilterOn = False
    End If

End Sub

Private Function PQ(s As String) As String
    'This function is used to "pad quotes" for SQL  
        PQ = Replace(s, "'", "''")
End Function

Я собрал пример базы данных, в которой есть несколько разных примеров, основанных на том, что я выложил здесь.Вы можете скачать эту базу данных здесь: http://www.utteraccess.com/forum/Search-filtering-Examples-t1968063.html

1 голос
/ 10 июня 2011

После некоторого поиска я наткнулся на это: http://www.techrepublic.com/blog/msoffice/run-a-parameter-query-within-an-access-form/701

Это не то, что я хотел, но это отличное решение ...

Я подожду, если нетодин получит лучший ответ, я приму свой (как бы мне не хотелось это делать).

...