VBA - создать запрос на основе условия SQL - PullRequest
1 голос
/ 06 марта 2020

Я новичок в VBA и хотел бы найти более простой способ создания запроса SQL. У меня есть 4 комбинированных списка, и запрос зависит от того, заполнены они или нет. Один из выпадающих списков связан с пользовательской формой с несколькими флажками, которые будут добавлять к запросу.

Вот код, который у меня есть в данный момент, и я хочу увеличить условия пользовательской формы:

If Sheets("Home Page").opecbbx.Value <> "" And Sheets("Home Page").wellchk.Value = False Then 'contractor only
        op = Sheets("Home Page").opecbbx.Value

                If Sheets("Home Page").sizcbbx.Value <> "" Then 'contractor and size
                    'Create SQL statement for filtering.
                    siz = Sheets("Home Page").sizcbbx.Value
                    SQL = "SELECT * FROM Filter Where contractor Like '%" & op & "%' And size_sec Like '%" & siz & "%';"

                Else

                    SQL = "SELECT * FROM Filter Where contractor Like '%" & op & "%';"

                End If

    ElseIf Sheets("Home Page").wellchk.Value = True And Sheets("Home Page").opecbbx.Value <> "" Then 'contractor and well
    op = Sheets("Home Page").opecbbx.Value

                If Sheets("Home Page").sizcbbx.Value <> "" Then 'contractor, size and well

                            siz = Sheets("Home Page").sizcbbx.Value
                            SQL = "SELECT * FROM Filter Where contractor Like '%" & op & "%' And size_sec Like '%" & siz & "%' And ID_NOC = '" & well & "';"

                Else

                    SQL = "SELECT * FROM Filter Where contractor Like '%" & op & "%' and ID_NOC='" & well & "';"

                End If

    ElseIf Sheets("Home Page").wellchk.Value = True Then

                If Sheets("Home Page").sizcbbx.Value <> "" Then 'size and well

                    siz = Sheets("Home Page").sizcbbx.Value
                    SQL = "SELECT * FROM Filter Where size_sec Like '%" & siz & "%' And ID_NOC = '" & well & "';"

                Else

                     SQL = "SELECT * FROM Filter Where ID_NOC='" & well & "';"

                End If

    ElseIf Sheets("Home Page").sizcbbx.Value <> "" And Sheets("Home Page").wellchk.Value = False And Sheets("Home Page").opecbbx.Value = "" Then 'size only

                siz = Sheets("Home Page").sizcbbx.Value
                SQL = "SELECT * FROM Filter Where size_sec Like '%" & siz & "%';"

    'Formation only
    ElseIf Sheets("Home Page").wellchk.Value = False And Sheets("Home Page").opecbbx.Value = "" And Sheets("Home Page").sizcbbx.Value = "" Then

                SQL = "SELECT * FROM Filter"

    End If

Как я могу это сделать, не добавляя много новых условий?

Спасибо

1 Ответ

0 голосов
/ 06 марта 2020

Я могу дать общий ответ, который может потребовать некоторого массажа, чтобы начать работать в VBA. Вы можете использовать гибкий подготовленный оператор, например, такой:

SELECT *
FROM Filter
WHERE
    (contractor LIKE ? OR contractor IS NULL) AND
    (size_sec LIKE ? OR size_sec IS NULL) AND
    (ID_NOC = ? OR ID_NOC IS NULL);

Для каждого из заполнителей ? вы должны либо связать значение из комбинированного списка, если оно определено, либо просто связать NULL в противном случае. Например, для заполнителя contractor вы должны связать op, если определено, иначе NULL. Этот подход работает так: если заданный критерий равен NULL, он игнорируется. Таким образом, если у вас есть только одно из трех значений, доступных в выпадающем списке, то только оно будет использоваться для фильтрации в предложении WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...