Помощь - VBA - Функциональность поиска - Доступ к базе данных MS - PullRequest
2 голосов
/ 17 апреля 2011
  • Структура базы данных:

Имя пользователя Строка

Местоположение Строка

Цена Номер

  • Требование:

    У меня есть список с некоторыми элементами, скажем, 100. Пользователь выберет только 10 случайным образом в списке (после изменения MULTISELECTв свойство 2fmMultiselect).У меня будет кнопка поиска.Как только я выбираю и нажимаю «Поиск», необходимо рассчитать и отобразить общую стоимость выбранных товаров.

Мой код поиска (спасибо Алексу, сэр)

enter code here
Private Sub CommandButton4_Click()

Dim Cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sName As String

Set Cn = New ADODB.Connection
Cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\test2.accdb;Persist Security Info=False"
Cn.ConnectionTimeout = 40
Cn.Open

Set rs = New ADODB.Recordset

sName = Replace$(TextBox1.Text, "'", "''")
rs.Open "Select * from SampleTable where UserName = '" & sName & "'", Cn, adOpenForwardOnly, adLockReadOnly, adCmdText

If (rs.EOF) Then
    MsgBox "no match"
Else
    TextBox3.Text = rs("UserName") & " " & rs("Location")


    rs.Close

End If

Set rs = Nothing
Cn.Close
Set Cn = Nothing


End Sub

Этот код был просто для поиска и отображения в текстовом поле.

Теперь мне нужно подсчитать цену того, что все поля UserName выбраны пользователем из списка.

1 Ответ

1 голос
/ 20 мая 2011

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

Private Function SelectedListString(lstSelected As Access.ListBox) As String
'Loop though a list and get the IDs of all the selected items
'Assumes the bound column is the contains the ID field
    Dim sList As String
    Dim vSelected As Variant        
    With lstSelected
        For Each vSelected In .ItemsSelected
            sList = sList & .ItemData(vSelected) & ","
        Next
    End With
    If sList <> "" Then sList = Left(sList, Len(sList) - 1) 'trim trailing coma
    SelectedListString = sList
End Function

Вы можете использовать результат в операторе IN в своем SQL

Dim sSql As String
If myListbox.ItemsSelected.Count > 0 Then
    sSql = "SELECT * FROM table WHERE IDField IN (" & SelectedListString(myListbox) & ")"
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...