Поиск в форме

Тема в разделе "Остальные БД", создана пользователем oza, 17 апр 2008.

  1. oza

    oza Гость

    Мне нужно организовать поиск книг в форме по названию, автору,издательству, виду издания. У меня есть запрос на выборку по этим критериям. Как на основе этого запроса организовать поиск в форме?
    В форме существует элемент ListBox(в нем содержится запрос), поле для ввода данных, кнопка. Нужно, чтоб при щелчке на кнопке искалось искомое(то, что пользователь ввел в текстовом поле) и в listBox отображалось найденное. Какую именно процедуру надо писать в кнопке? Название столбцов в запросе, сам запрос на русском языке.
    Например пользователь вводит в текстовое поле,например Акунин и выводится все книги этого автора.Или вводит Роман, и выводится все романы, которые есть в запросе. Как это сделать? Каким образом? Какой должен быть код у кнопки? Я уже всю голову себе сломала...Помогите,кто чем может, пожалуйста.
     
  2. BOPOHA

    BOPOHA Well-Known Member

    Регистрация:
    26 апр 2006
    Сообщения:
    118
    Симпатии:
    0
    У формы есть атрибуты Filter и FelterOn.

    Например:
    Код (Text):
    Me.Filter = "поле=значение And поле=значение"
    Me.FilterOn = true
     
  3. Shader88

    Shader88 Гость

    BOPOHA, если использовать такой фильтр точно будет отображаться то что нужно? :(
    Как я понимаю, поле Автор содержит в себе ФИО автора, человеу необходимо вводить например только Фамилию...
    (Сорри если туплю, с Access'ом слава богу уже давно не работаю)

    oza, код точно написать не могу(могут быть ошибки)(может кто нить причешет), сорри, не установлен этот -бип-ский продукт =) Но суть расскажу =)
    У вас есть запрос который формирует данные для формы например такого вида:
    Код (Text):
    Select Книга.Название, Автор.ФИО, Издательство.Название, Издание.ВидИздания
    From...
    Вам нужно 2 параметра, по КАКОМУ ПОЛЮ искать и ЧТО ИСКАТЬ.
    В обработчике клика кнопки делаете следующее:
    1. Получаете данные что искать(например Акунин)(переменная strData), и по чем искать(например Автор)(переменная strField)
    2. После этого определяете строку с запросом(как у вас в запросе данных для формы):
    Код (Text):
     strSql = "Select Книга.Название, Автор.ФИО, Издательство.Название, Издание.ВидИздания From... Where "
    3. Далее определяете с полем по которому искать
    Код (Text):
    IF strField = "Автор" Then
    strSql = strSql & "Автор.ФИО LIKE " & strData & ";"
    END IF

    IF strField = "Издательство" Then
    strSql = strSql & "Издательство.Название LIKE " & strData & ";"
    END IF
    И т.д. для всех параметров поиска.
    4. В самом конце процедуры пишите:
    Код (Text):
    Me!RecordSet = strSql
    Me!Requery

    Вот примерно так =)
    Еще раз повторюсь ЗА ОШИБКИ, прошу извинить, Аксесом уже давно не пользуюсь, впрочем и не жалею =)))
     
  4. oza

    oza Гость

    Я немного не поняла, что надо писать в строке strSql = "Select Книга.Название, Автор.ФИО, Издательство.Название, Издание.ВидИздания From... Where(именно в этом месте) "


    Вот что накалякала:
    strField = [Авторы]
    strField = [Книги]
    strField = [Виды_книг]
    strData = [ФИО]
    strData = [Книги.Название]
    strData = [Вид_издания]

    strSql = "Select Авторы.ФИО, Книги.Название,Виды_книг.Вид_издания From [Поиск_книг] "
    If strField = "Авторы" Then
    strSql = strSql & "Авторы.ФИО LIKE " & strData & ";"
    End If

    If strField = "Книги" Then
    strSql = strSql & "Книги.Название LIKE " & strData & ";"

    End If
    If strField = "Виды_книг" Then
    strSql = strSql & "Вид_издания LIKE " & strData & ";"

    End If
    Me!RecordSet = strSql
    Me!Requery

    End Sub


    Не работает, что-то я напутала,да еще как! Помогите,плиз... [Поиск_книг] это название моего запроса.

    В прошлом году, у меня была курсовая на VBA 6.0, там была связь в БД Access. Там был вот такой код:

    Private Sub Command2_Click()
    sapr = "SELECT * From[Каталог деталей] Where [место нахождения] LIKE '" & Text2.Text & "'"
    Data1.RecordSource = sapr
    Data1.Refresh
    SUMM
    End Sub

    Тут видимо, что-то похожее должно быть. В принципе, можно сделать 3 кнопки, и 3 поля, чтобы не писать цикл.
     
  5. Shader88

    Shader88 Гость

    oza во From пишешь источник данных. В данном случае у тебя запрос, поэтому вроде все правильно.

    Далее.
    Код (Text):
    strField = [Авторы]
    strField = [Книги]
    strField = [Виды_книг]
    strData = [ФИО]

    Эээ... Нет =)
    Тут ты должна из формы получать данные.
    Например есть у тебя Поле1(скорее всего конечно там список) в котором вписываешь Параметр поиска значит:
    strField = Поле1.Text
    Соответственно с данными по которым искать
    strData = Поле2.Text (Например Фамилия автора)

    Т.е. примерно так должно получаться:
    Код (Text):
    strField = Поле1.Text
    strData = Поле2.Text

    strSql = "Select Авторы.ФИО, Книги.Название,Виды_книг.Вид_издания From [Поиск_книг] Where "

    If strField = "Авторы" Then
    strSql = strSql & "ФИО LIKE "" & strData & "";" ' ФИО тут название поля в запросе которое содержит ФИО автора, далее по тексту соотвествено
    End If

    If strField = "Книги" Then
    strSql = strSql & "Название LIKE "" & strData & "";"
    End If

    If strField = "Виды_книг" Then
    strSql = strSql & "Вид_издания LIKE "" & strData & "";"
    End If

    Me.RecordSource = strSql 'Вот тут ошибся, поэтому правильно RecordSource
    Me.Refresh
     
  6. oza

    oza Гость

    моя форма выглядит вот так:
    Дело в том, что туда, куда я вписываю критерии поиска это текстовое поле, а откуда берутся данные, это список. Как определить список? Что писать после точки?Ну как:
    strField = Поле3.Text
    strData = Список7.???
    Я пробовала 2 из списка это ListCount и ListIndex, все равно не работает.
    А еще он ругался на то, что для объекта Поле3 не определен фокус(идиотство конечно!)
    Я добавила Поле3.SetFocus
    И еще непонятно, что писать после слова Where?
    Может мне как-нибудь перерисовать форму?Чтобы был не список, а поле со списком? Тогда непонятно, что там должно быть.
    Я понимаю, вас уже достала, но только вы отвечаете в этой теме весьма логично =)
     

    Вложения:

  7. ~/~

    ~/~ Гость

    strData = Список7.Column(0) ' Получить первый элемент ВЫДЕЛЕННОЙ строки.

    Т.е. если у тебя в списке 2 колонки, то для доступа к данным 2-ой колонки писать Список7.Column(1) и т.д.

    Это к Биллу =) Вернее его работникам =)


    Пробел =)
    А дальше смотри, что получиться =)
    Если у тебя выбрано поле поиска Авторы и в критерии стоит Иванов, то будет работать это так:
    Код (Text):
    strField = Поле1.Text
    strData = Список7.Column(0)

    strSql = "Select Авторы.ФИО, Книги.Название,Виды_книг.Вид_издания From [Поиск_книг] Where "
    ' StrSql на этом шаге равна: Select Авторы.ФИО, Книги.Название,Виды_книг.Вид_издания From [Поиск_книг] Where

    If strField = "Авторы" Then ' да это то что нам нужно
    strSql = strSql & "ФИО LIKE "" & strData & "";" ' ФИО тут название поля в запросе которое содержит ФИО автора, далее по тексту соотвествено
    ' Теперь strSql равна: Select Авторы.ФИО, Книги.Название,Виды_книг.Вид_издания From [Поиск_книг] Where ФИО Like "Иванов";
    End If

    If strField = "Книги" Then ' сюда не заходим
    strSql = strSql & "Название LIKE "" & strData & "";"
    End If

    If strField = "Виды_книг" Then ' сюда не заходим
    strSql = strSql & "Вид_издания LIKE "" & strData & "";"
    End If

    Me.RecordSource = strSql 'Обновляем данные формы
    Me.Refresh 'Обновляем форму
     
  8. oza

    oza Гость

    Ругается: "Ошибка синтаксиса в предложении Where"
    И выделяет строку:
    Me.RecordSource = strSql
     
  9. ~/~

    ~/~ Гость

    oza, покажи как строка strSQL выглядит перед вызовом Me.RecordSource = strSql

    И еще сразу, что то не посмотрел =)
    Поменяй везде
    Код (Text):
    LIKE "" & strData & "";"
    на
    Код (Text):
    LIKE '" & strData & "*';"
     
  10. oza

    oza Гость

    [codebox]Private Sub Кнопка4_Click()
    Поле5.SetFocus
    strField = Поле5.Text
    strData = Список0.Column(0)
    strSql = "Select Авторы.ФИО, Книги.Название,Виды_книг.Вид_издания, Издательства.Название_издательства From [Поиск_книг] Where "
    If strField = "Авторы" Then
    strSql = strSql & "ФИО LIKE '" & strData & "*';"
    End If
    If strField = "Книги" Then
    strSql = strSql & "Название LIKE '" & strData & "*';"
    End If
    If strField = "Виды_книг" Then
    strSql = strSql & "Вид_издания LIKE '" & strData & "*';"
    End If
    If strField = "Издательства" Then
    strSql = strSql & "Название_издательства LIKE '" & strData & "*';"
    End If
    Me.RecordSource = strSql
    Me.Refresh
    End Sub[/codebox]

    А еще strData = Список0.Column(0) надо писать перед каждым If'ом(с разными цифрами в скобках)?Колонки каждый раз ведь разные откуда надо брать текст...
     
  11. BOPOHA

    BOPOHA Well-Known Member

    Регистрация:
    26 апр 2006
    Сообщения:
    118
    Симпатии:
    0
    Как-то слишком много буков для такой простой задачи.
    Доступ к данным на форме очень просто получать через Me.<имя> - не перепутаешь...
    Переопределять данные на форме - RowSorce не нужно, укажите его один раз.
    Дальше используйте Me.Filter и Me.FilterOn. Me.Filter присваивают условие отбора без ключевого слова Where.
    Посмотрев на форму, я так и не понял где отображаются данные....
    Можете вырезать из вашего проекта эту форму и необходимые данные и приложить к сообщению, так будет проще и быстрее.
     
  12. oza

    oza Гость

    Всем спасибо! Реализовала с помощью макроса!
     
Загрузка...

Поделиться этой страницей