Как отобразить все значения - PullRequest
0 голосов
/ 01 марта 2011

Использование VB6

Я использую флажок и комбинированный список в форме.

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

код.

Private Sub chkbox1_Click()
   combobox1.enable = true
End Sub

Private Sub chkbox2_Click()
   combobox2.enable = true
End Sub

Код выхода

If chkbox1.Value = 1 Then
    sql2 = "Select * from table1 where value = '" & combobox1 & "' "
ElseIf chkbox2.Value = 1 Then

    sql2 = "Select * from table1 where value = '" & combobox2 & "'"
Else 
    sql2 = "Select * from table1"
End If

Приведенный выше код работает, но когда я нажимаю два флажка, включаются два комбинированных списка, а затем я запускаю запрос, показывающий значение combobox1.

Например

I selected the value = 50 from combobox1 (checkbox1 clicked)
I selected the value = 100 from combobox2 (checkbox2 clicked)

когда я запускаю выходной код, тогда на выходе отображается значение, где значение = 50, также не отображается значение = 100.

В выходном коде должны отображаться оба значения

Как решить эту проблему.

Нужна помощь по коду vb6

Ответы [ 2 ]

2 голосов
/ 01 марта 2011
If chkcombin1.Value = 1 And chkcombin2.Value = 0 Then
    sql2 = "Select * from table1 where value = '" & combobox1 & "' "
ElseIf chkcombin2.Value = 1 And chkcombin1.Value = 1 Then

    sql2 = "Select * from table1 where value = '" & combobox2 & "'"
ElseIf chckcombin1.Value = And chkcombin2.Value = 1
    sql2 = "Select * from table 1 Where value = '" & combobox1 & "' and value = '" & combobox2 & "'"
Else
    sql2 = "Select * from table1"
End If

Что происходит, если оба проверены, первый случай истинен, так как chkcombin1.Value = 1 Так что вам нужно проверить, что другой флажок не установлен.

Редактировать опкомментарии

Поскольку у вас есть несколько флажков, я бы посоветовал:

это не проверено и не оптимально, но оно должно дать вам представление

Dim select As String = "Select * from table 1"

'This needs to be a field for the whole class
Dim where As String = ""

If chkcombin1.Value = 1 Then
   where += CreateCaluse(combobox1)
End If

'Then do that for each of your comboboxes

'Then
sql2 = select + where

Private Function CreateClause(ByVal comboboxValue As String) As String
    If where = "" Then
        Return " Where value = '" & comboboxValue & "'"
    Else
        Return " and value = '" & comboboxValue & "'"
    End If
End Function

SO то, что он делает, записывает флажок no, отмеченный частью вашего оператора, затем он подготавливает предложение where, используя функцию для генерации необходимых частей, если предложение where является пустой строкой, он пишет чтоэто должно быть для 1, где, затем добавляет все необходимые пункты and.Наконец, это объединяет утверждение вместе.Если в предложении where ничего нет, вы получите Select * from table1

0 голосов
/ 02 марта 2011

Вы можете попробовать это

sql2 = "SELECT * FROM table1 WHERE 0=1"
If chkbox1.Value = vbChecked Then
    sql2 = sql2 & " OR value = '" & Replace(combobox1.Text, "'", "''") & "'"
End If
If chkbox2.Value = vbChecked Then
    sql2 = sql2 & " OR value = '" & Replace(combobox2.Text, "'", "''") & "'"
End If
If chkbox3.Value = vbChecked Then
    ...

Или, если вы используете управляющие массивы, код будет значительно сокращен

sql2 = "SELECT * FROM table1 WHERE 0=1"
For i = 1 To 10
    If chkbox(i).Value = vbChecked Then
        sql2 = sql2 & " OR value = '" & Replace(ComboBox(i).Text, "'", "''") & "'"
    End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...