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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Поиск записей из уже отобранного массива
 
 автор: mixail   (14.07.2010 в 11:24)   личное сообщение
 
 

Доброго времени суток) Нужна помощь... Проблема состоит в создании полноценного поиска по форме с учетом нескольких столбцов. Хотелось бы чтобы данные из таблицы отбирались сначала по одному столбцу, затем при вводе символов в другое поле поиска (по другому столбцу таблицы) начинался отбор из уже отобранных полей. Сейчас за отбор по одному полю отвечает следующий код (взятый из одного из примеров)) -
Private Sub ClientForFilter_Change()
Dim strFind As String
strFind = Nz(Me.ClientForFilter.Text, "")
If strFind <> "" Then
Me.Filter = "[LINE] Like '" & strFind & "*'"
Me.FilterOn = True
Me.ClientForFilter.SelStart = 200
Else
Me.FilterOn = False
End If

End Sub

  Ответить  
 
 автор: kot_k_k   (14.07.2010 в 11:58)   личное сообщение
 
 

а так что не работат

Me.Filter = "[LINE] Like '" & strFind & "*'" & "[LINE_1] Like '" & strFind_1 & "*'"

вот
Private Sub ClientForFilter_ПОЛЕ2_Change()
Dim strFind As String
strFind_ПОЛЕ2 = Nz(Me.ClientForFilter.Text, "")
If strFind_ПОЛЕ2 <> "" Then
' можно так
Me.Filter = Me.Filter & "[ПОЛЕ2] Like '" & strFind_ПОЛОЕ2 & "*'" 
' можно так 
if Nz(Me.Filter,'')='' then 
            Me.Filter = "[ПОЛЕ2] Like '" & strFind_ПОЛОЕ2 & "*'" 
       else
            Me.Filter = Me.Filter & "[ПОЛЕ2] Like '" & strFind_ПОЛОЕ2 & "*'" 
endif
Me.FilterOn = True
Me.ClientForFilter.SelStart = 200
Else
Me.FilterOn = False
End If
End Sub

  Ответить  
 
 автор: snipe   (14.07.2010 в 12:14)   личное сообщение
 
 

не фонтан - но может натолкнет на нужную мысль
http://hiprog.com/forum/read.php?id_forum=1&id_theme=6809&page=1

  Ответить  
 
 автор: mixail   (14.07.2010 в 14:50)   личное сообщение
 
 

Снайп, по твоей ссылке как раз то, что нужно))) Но там используется подформа у меня же нужно сделать это по одной форме пока код следующий (но он не работает, указывая ошибку в строчке - :

If strFilter = "" Then 
   Me![название формы].Form.RecordSource = "SELECT [название формы].* FROM [название формы];" 
End If
End Function

А весь код выглядит так пока что:


Option Compare Database
Public asd1 As String
Public asd2 As String
Public asd3 As String
Public asd4 As String
Public asd5 As String
Option Explicit

Private Function FilterBasa1()
Dim strFilter As String
strFilter = "" 

If asd1 <> "" Then 
    strFilter = "[LINE] Like '" & asd1 & "*'"
End If

If asd2 <> "" Then
    If strFilter = "" Then 
        strFilter = "[PRODUCEDBY] Like '" & asd2 & "*'"
    Else
        strFilter = strFilter & " AND [PRODUCEDBY] Like '" & asd2 & "*'"
    End If
End If

If asd3 <> "" Then
    If strFilter = "" Then
        strFilter = "[TYPE] Like '" & asd3 & "*'"
    Else
        strFilter = strFilter & " AND [TYPE] Like '" & asd3 & "*'"
    End If
End If

If asd4 <> "" Then
    If strFilter = "" Then
        strFilter = "[PROCESSING_COMPANY] Like '" & asd3 & "*'"
    Else
        strFilter = strFilter & " AND [PROCESSING_COMPANY] Like '" & asd3 & "*'"
    End If
End If

If strFilter = "" Then 
    Me![название формы].Form.RecordSource = "SELECT [название формы].* FROM [название формы];"
End If
End Function

Private Sub Form_Load()
asd1 = "" 
asd2 = "" 
asd3 = "" 
asd4 = ""
asd5 = "ClientForFilter"
End Sub

Private Sub ClearAll_Click()
Me!ClientForFilter = Null
Me!TypeLine = Null
Me!Processing = Null
Me!ProducedComp = Null
Call filterBasa(asd5)
End Sub

Private Sub ClientForFilter_Change()
asd5 = "ClientForFilter"
Call filterBasa("ClientForFilter") 
End Sub

Private Sub ProducedComp_Change()
asd5 = "ProducedComp"
Call filterBasa("ProducedComp")
End Sub

Private Sub Type_Change()
asd5 = "TypeLine"
Call filterBasa("TypeLine") 
End Sub
Private Sub Processing_Change()
asd5 = "Processing"
Call filterBasa("Processing")
End Sub
Private Function filterBasa(bnm As String)

Me!ClientForFilter.SetFocus
If Nz(Me!ClientForFilter.Text, 0) = 0 Then 
    asd1 = "" 
Else
    asd1 = Me!ClientForFilter.Text
End If

Me!TypeLine.SetFocus 
If Nz(Me!TypeLine.Text, 0) = 0 Then
    asd2 = ""
Else
    asd2 = Me!TypeLine.Text
End If

Me!Processing.SetFocus 
If Nz(Me!Processing.Text, 0) = 0 Then
    asd3 = ""
Else
    asd3 = Me!Processing.Text
End If

Me!ProducedComp.SetFocus 
If Nz(Me!ProducedComp.Text, 0) = 0 Then
    asd4 = ""
Else
    asd4 = Me!ProducedComp.Text
End If

Call FilterBasa1
Me(bnm).SetFocus 
Me(bnm).SelStart = Me(bnm).SelLength 
End Function

  Ответить  
 
 автор: snipe   (14.07.2010 в 15:58)   личное сообщение
 
 

Можно я немного поматерюсь (простите старую больную обезьяну)
Какого х.....хрена
"SELECT [название формы].* FROM [название формы];
название формы
вас что не учили писать запросы на SQL - там обращаются к таблицам
подформа выбрана потому что инфу нужно было выводить в табличной форме
а в табличной форме верхний колонтитул не доступен
что вам мешает выводить инфу в ленточной форме (и колонтитул доступен) и инфа выводится как надо

ухватите принцип - и все будет хорошо

если честно я его ухватил после разбора примера Lukas (наберите в поисковике форума слово кукуруза)

  Ответить  
 
 автор: mixail   (14.07.2010 в 16:11)   личное сообщение
 
 


Можно я немного поматерюсь (простите старую больную обезьяну)
Какого х.....хрена
"SELECT [название формы].* FROM [название формы];
название формы
вас что не учили писать запросы на SQL - там обращаются к таблицам
подформа выбрана потому что инфу нужно было выводить в табличной форме
а в табличной форме верхний колонтитул не доступен
что вам мешает выводить инфу в ленточной форме (и колонтитул доступен) и инфа выводится как надо


ничего ничего))) я этого ожидал. Я ни sql ни VBA не знаю. Но задачу выполнить надо, вот и попытался по аналогии делать с примерами, до определенного момента получалось. Вместо *название формы* у меня стояло SEISMIC_SEARCHER - так называется моя форма в которой необходимо организовать поиск. Я думал что выражением Me![название формы].Form.RecordSource = "SELECT [название формы].* FROM [название формы];" мы указываем месторасположение наших данных.

  Ответить  
 
 автор: mixail   (14.07.2010 в 17:35)   личное сообщение
 
 

snipe, а что необходимо изменить для вывода строк в ленточной форме???

  Ответить  
 
 автор: Explorer   (14.07.2010 в 17:49)   личное сообщение
 
 

поближе познакомиться со средой разработки которой пользуешся ИМХО

выложи пример своей БД напиши просто что тебе надо

  Ответить  
 
 автор: mixail   (14.07.2010 в 18:14)   личное сообщение
 
 

http://slil.ru/29464039 вот тут лежит пример. Нужно чтобы поиск осуществлялся по полям Line, Produced company, Processing company, Type. Соответственно отбирая записи из уже созданного отбора (по предыдущему отбору), например я хочу отобрать записи по по олю Line и Produced company, ввожу туда значения - access выводит поля...пока работает только поле Line((( Заранее спасибо за помощь)))

  Ответить  
 
 автор: Explorer   (14.07.2010 в 18:48)   личное сообщение
 
 


http://slil.ru/29464039 вот тут лежит пример



к сожалению вирус-сканер меня на этот ресурс не пускает

  Ответить  
 
 автор: mixail   (14.07.2010 в 15:36)   личное сообщение
 
 

kot_k_k, так не работает...сначала просит установить фокус на ClientForFilter, потом не хватает оператора в Me.Filter=....(((((

  Ответить  
 
 автор: kot_k_k   (14.07.2010 в 16:00)   личное сообщение
 
 

ну вообщето поменять названия нужно было везде я то наспех де побачив
и добавить - and

п.с. прочитав маты старой больной обезьны
а на хрена это вообще делать - если можно просто отменить фильтр при пустой строче
Me.FilterOn=False

  Ответить  
 
 автор: mixail   (14.07.2010 в 16:19)   личное сообщение
 
 

названия везде изменены естественно)) Вот так это дело выглядело на конечном этапе -

Private Sub ClientForFilter_Change()
Dim strFind As String
strFind = Nz(Me.ClientForFilter.Text, "")
If strFind <> "" Then
Me.Filter = "[LINE] Like '" & strFind & "*'"
Me.FilterOn = True
Me.ClientForFilter.SelStart = 200
Else
Me.FilterOn = False
End If

End Sub


Private Sub ProducedComp_Change()
Dim strFind1 As String
Me.ClientForFilter.SetFocus
strFind1 = Nz(Me.ClientForFilter.Text, "")
If strFind1 <> "" Then
Me.Filter = "[LINE] Like '" & strFind & "*'" & "[PRODUCEDBY] Like '" & strFind1 & "*'"
Me.FilterOn = True
Me.ClientForFilter.SelStart = 200
Else
Me.FilterOn = False
End If
End Sub

  Ответить  
 
 автор: snipe   (15.07.2010 в 05:09)   личное сообщение
57 Кб.
 
 

Вот =>
как просили - отбор по мере ввода символов в поисковые поля
ИМХО - я бы на Вашем месте поля со списком применил - это бы ускорило процес выбора инфы юзером и нагрузка на комп по ниже будет, опять же ПолеСоСписком само умеет отбирать инфу по мере ввода символов, но увы я не на вашем месте

Теперь ответы на Ваши вопросы
Я думал что выражением Me![название формы].Form.RecordSource = "SELECT [название формы].* FROM [название формы];" мы указываем месторасположение наших данных

- думаете не совсем правильно да - действительно указывается местоположение данных а точнее что и откуда взять Свойство формы RecordSource (по русски Источник записей) - тут указывается имя таблицы, имя сохраненного запроса или запрос написанный на SQL

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

тут 2 варианта
либо меняем источник записей (RecordSource) - т.е. изменяем набор записей (недостаток в том что юзер в определенные моменты не видит сколько всего записей в базе)
либо применяем фильтр (совместно с включить фильтр) (тут другая беда - юзер забывает что фильтр включен и упорно доказывает что видит все записи)

  Ответить  
 
 автор: mixail   (15.07.2010 в 10:24)   личное сообщение
 
 

Огромное мега спасибо ВСЕМ!!!)))) И Снайпу в отдельности)))) Я на самом деле тоже думал по поводу применения поля со списком, но начал сперва биться с этим вариантом и увяз, на сейчас попытаюсь туда и поле со списком ввести. По поводу изучения матчасти согласен с Explorer)) По просту это новая область для меня и образование у меня не программерское, а задача поставлена, так что приходится справлятся своими силами))) Может кто-нибудь знает книжки толковые по этой части??? В книженциях про access такой информации не дают...

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