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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Нужно подправить код поиска
 
 автор: Krayshon   (05.04.2016 в 14:38)   личное сообщение
 
 

Использую такой вот код, нашел его в одной из тем.
Проблема в том что в поле можно писать только одно слово или часть, не ставится пробел. Как подправить код, что бы можно было использовать пробел?


Private Sub Поле39_Change()
Dim strFind As String
strFind = Nz(Me.Поле39.Text, "")
If strFind <> "" Then
    Me.Filter = "[Название публикации] Like '*" & strFind & "*'"
    Me.FilterOn = True
    Me.Поле39.SelStart = 200
    Me.Поле41 = ""
    Me.Поле43 = ""
    Me.Поле45 = ""
    Me.Поле49 = ""
    Me.Поле53 = ""
Else
    Me.FilterOn = False
    Me.Поле39.SetFocus
    
End If
End Sub

  Ответить  
 
 автор: shanemac51   (05.04.2016 в 14:59)   личное сообщение
 
 

надо найти Сухно Александр Михайлович
не набирается о а
набрала оа
затем вставила пробел --конечно это костыль

  Ответить  
 
 автор: Krayshon   (05.04.2016 в 15:04)   личное сообщение
 
 

Работает и простая "*", к примеру Сухно*Александр, но это как-то не правильно

  Ответить  
 
 автор: shanemac51   (05.04.2016 в 16:25)   личное сообщение
 
 

при наборе о*а выберем и осадчего
а это не надо

  Ответить  
 
 автор: Krayshon   (06.04.2016 в 14:27)   личное сообщение
 
 

Ну так что, не у кого нет предложений по улучшению? Еще бы неплохо добавить вывод msgBox, если нет совпадений, ибо сейчас это приводит к ошибке

  Ответить  
 
 автор: shanemac51   (06.04.2016 в 15:42)   личное сообщение
 
 

Конечно можно набирать о/а или о"а (кавычка)

затем заменить черточку\кавычку на пробел
осадчего по крайней мере не выберем
пустая выборка , если есть добавление записей --не дает ошибки
если добавления нет --надо проверять

  Ответить  
 
 автор: Alex   (07.04.2016 в 13:39)   личное сообщение
 
 

У меня уже давно, в разных проектах работает вот такой код:


Private Sub Поиск_Change() 'поле для ввода строки поиска, расположено в главной форме
On Error GoTo Поиск_Err
    Dim strFind As String
    strFind = Nz(Me.Поиск.Text, "")
    If strFind <> "" Then
        Me!Поиск = strFind
            Forms("ИмяГлавнойФормы").ИмяПодчиненнойФормы.Form.Filter = "[ИмяПоляПодчиненнойФормыГдеИскать] Like '*" & strFind & "*'"
            Forms("ИмяГлавнойФормы").ИмяПодчиненнойФормы.FilterOn = True
        Me.Поиск.SelStart = 200
    Else
        Forms("ИмяГлавнойФормы").ИмяПодчиненнойФормы.Form.FilterOn = False
    End If
Поиск_Exit:
Exit Sub
Поиск_Err:
    Forms("ИмяГлавнойФормы").ИмяПодчиненнойФормы.Form.FilterOn = False
    MsgBox Err.Description
Resume Поиск_Exit
End Sub

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

  Ответить  
 
 автор: Krayshon   (08.04.2016 в 11:29)   личное сообщение
 
 

Те же параметры поиска что и у меня, как у вас пробелы пишет не пойму

  Ответить  
 
 автор: shanemac51   (08.04.2016 в 12:13)   личное сообщение
 
 

при посимвольном поиске пробел съедается
но если набрать условие поиска и нажать кнопку --все ОК

  Ответить  
 
 автор: Alex   (08.04.2016 в 14:35)   личное сообщение
 
 

Может какая-то разница в системе...
У меня везде: winXP SP3, MSOffice2003 SP3.
Офис устанавливаю всегда так: Выборочная установка - Расширенная настройка приложений - Запускать все с моего компьютера.
Щас еще раз проверил: ищет и сначала и по вхождению, с пробелом и без, никаких ошибок не выдает...

  Ответить  
 
 автор: Krayshon   (08.04.2016 в 11:48)   личное сообщение
 
 

object doesn t support this property or method
такая вот ошибочка при попытке заполнить поле

Private Sub Поле39_Change()
On Error GoTo Поиск_Err
    Dim strFind As String
    strFind = Nz(Me.Поле39.Text, "")
    If strFind <> "" Then
        Me.Поле39 = strFind
             Forms("xxx").[yyy].Form.Filter = "[Столбец] Like '*" & strFind & "*'"
             Forms("xxx").[yyy].FilterOn = True
        Me.Поле39.SelStart = 200
    Else
         Forms("xxx").[yyy].Form.FilterOn = False
    End If
Поиск_Exit:
Exit Sub
Поиск_Err:
     Forms("xxx").[yyy].Form.FilterOn = False
    MsgBox Err.Description
Resume Поиск_Exit
End Sub

  Ответить  
 
 автор: Alex   (08.04.2016 в 14:45)   личное сообщение
45 Кб.
 
 

У Вас поле для ввода строки поиска местами называется "Поле39", местами "Поиск"
Вот, рабочая модель...

  Ответить  
 
 автор: Krayshon   (08.04.2016 в 15:18)   личное сообщение
 
 

Везде поле называется "Поле39", а поиск это что будет во время ошибок происходить
On Error GoTo Поиск_Err - во время ошибки перейти к "Поиск_Err"

Поиск_Err: - перейдя сюда отключаем фильтр и выводим ошибку
Forms("xxx").[yyy].Form.FilterOn = False
MsgBox Err.Description
Resume Поиск_Exit - далее перейти к Поиск_Exit

Поиск_Exit: - вот сюда
Exit Sub

  Ответить  
 
 автор: Alex   (08.04.2016 в 15:20)   личное сообщение
 
 

Должно быть везде одинаково

  Ответить  
 
 автор: Krayshon   (08.04.2016 в 15:25)   личное сообщение
 
 

Ничего не должно быть одинаково
Вот рабочая часть кода с поиском на той же форме что и поле, там так же все по разному названо. Вместо Поиск_Err и Поиск_Exit можно хоть "абракадабра" написать.

On Error GoTo Поиск_Err
    Dim strFind As String
    strFind = Nz(Me.Поле39.Text, "")
    If strFind <> "" Then
        Me.Filter = "[Столбец] Like '*" & strFind & "*'"
        Me.FilterOn = True
        Me.Поле39.SelStart = 200
    Else
        Me.FilterOn = False
        Me.Поле39.SetFocus
    End If
Поиск_Exit:
Exit Sub
Поиск_Err:
    Me.FilterOn = False
    Me.Поле39 = Null
    MsgBox "Совпадений не обнаружено!", vbCritical, "Поиск"
Resume Поиск_Exit
End Sub

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