Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проверка содержания значения в списке
 
 автор: divino74   (27.07.2011 в 21:02)   личное сообщение
 
 

как проверить содержится ли значние поля1 в combobox1?
(combobox формируется по запросу - значения могут менятся)

  Ответить  
 
 автор: час   (27.07.2011 в 21:24)   личное сообщение
 
 

пример:
Используется таблица для combobox - "PRODUCTS_STOREMAN_TBL"


' Поиск в таблице "PRODUCTS_STOREMAN_TBL" уже загруженного заказа STR_ORDER_NUMBER 
Dim db As Database
Dim RST As Recordset
Dim STR_ORDER_NUMBER  as string
' присвоим переменной - значение поля
 STR_ORDER_NUMBER = Me!Поле1

Set db = CurrentDb
Set RST = db.OpenRecordset("PRODUCTS_STOREMAN_TBL", dbOpenDynaset)

If Not RST.EOF Or Not RST.BOF Then
   RST.MoveLast
   RST.MoveFirst
End If

       If RST.RecordCount <> 0 Then
           'Поиск первой записи, удовлетворяющей критерию отбора
              RST.MoveFirst
              RST.FindFirst "[ORDER_NUMBER] = '" & STR_ORDER_NUMBER & "'"' для строкового значения
           If RST.NoMatch = False Then Msgbox "Есть такое!"                ' найдено
       End If

      RST.Close
      db.Close
Set db = Nothing
Set RST = Nothing

  Ответить  
 
 автор: Lukas   (27.07.2011 в 23:06)   личное сообщение
 
 


    Dim rst As DAO.Recordset
    With Me.cmb1
        Set rst = .Recordset
        If rst Is Nothing Then
            .SetFocus
            .Dropdown
            Set rst = .Recordset
        End If
    End With
    With rst
        .FindFirst .Fields(1).Name & "='" & Me.txt1 & "'" 'ищем во втором столбце источника комбобокса значение-строку
        If Not .NoMatch Then
            MsgBox "Есть :)"
        Else
            MsgBox "Нету :("
        End If
    End With
    Set rst = Nothing

  Ответить  
 
 автор: Stanislav   (28.07.2011 в 16:04)   личное сообщение
31 Кб.
 
 

Еще вариант. Без использования наборов записей. Используя источник данных комбобокса, заполняем данными временную таблицу. И функцией dcount проверяем, есть ли там искомое значение.


Private Sub CheckButton_Click()
DoCmd.RunSQL "DELETE Table1Draft.* FROM Table1Draft"

DoCmd.RunSQL "INSERT INTO Table1Draft " & Me.ValueList.RowSource

If DCount("TextField", "Table1Draft", "TextField='" & Nz(Me.SearchText, "") & "'") > 0 Then
MsgBox "Значение найдено!", vbInformation
Else
MsgBox "Совпадений нет!", vbInformation
End If
End Sub

  Ответить  
 
 автор: час   (28.07.2011 в 16:44)   личное сообщение
 
 

Круто, если так дальше пойдёт следующий вариант будээ в 3 строки.
======================
Жаль афтору пофигу.

  Ответить  
 
 автор: Lukas   (29.07.2011 в 00:55)   личное сообщение
 
 

>>следующий вариант будээ в 3 строки.

Количество строк в данном случае далеко не главное.
В первом варианте происходит ненужное(повторное) считывание данных с диска. (1 тормоз)
Во втором варианте повторного считывания нет, используется рекордсет самого списка. (0 тормозов)
В третьем варианте удаление данных, чтение + запись данных, чтение данных с диска (4 тормоза)

Кроме того, в 1 и 3 вариантах значение ищется не в наборе данных списка, а в источнике этого набора,
что не есть правильно, так как в источнике к этому времени данные уже могут измениться,
например другой пользователь добавил, изменил или удалил что-то.
А автор просил найти именно в наборе данных списка комбобокса.

Правда и 2 вариант не безгрешен.
Я там забыл (как всегда) заполнить рекордсет перед поиском. :)

  Ответить  
 
 автор: Дядя Федор   (29.07.2011 в 08:03)   личное сообщение
 
 

А зачем это надо? Подозреваю для обработки ошибки типа "нет в списке". Но для этого есть событие "отсутствие в списке". ИМХО.

  Ответить  
 
 автор: час   (29.07.2011 в 09:33)   личное сообщение
 
 


Надо искать в таблице-источнике - иначе как Вы сами сказали - могут обработаться не актуальные для списка данные, а список просто забыли обновить.
Хотя не буду утверждать - зависит от ситуёвины конкретной.
И ваще, Lukas - Вам виднеееее

  Ответить  
 
 автор: AlexSyr   (29.07.2011 в 19:38)   личное сообщение
 
 


Я там забыл (как всегда) заполнить рекордсет перед поиском. :)


И не надо

  With Me.cmb1
    If .Recordset Is Nothing Then
      .SetFocus
      .Dropdown
    Else
      .Requery
    End If
  End With
  With Me.cmb1.Recordset
    .FindFirst .Fields(1).Name & " Like '*" & Me.txt1 & "*'"
    If Not .NoMatch Then
      MsgBox "Есть :)    " & .Fields(1)
    Else
      MsgBox "Нету :("
    End If
  End With

  Ответить  
 
 автор: Lukas   (30.07.2011 в 01:06)   личное сообщение
 
 


И не надо...


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

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList