Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Процедура поиска с отбором


Автор: Dipresiy 24.5.2007, 09:51
Всем привет!

Прогу написал, а в процедуру или модуль никак не могу переделать, т.к. она раз 10 в форме используется. Очень надеюсь на вашу помощь! За ранее благодарен!

Код

Private Sub ПоискСерНом_Change()
Dim s As String
    s = Me.ПоискСерНом.Text 
    With Me.[Форм_Поиск].Form 
      If Len(s) <> 0 Then
        s = " WHERE Left([СерНом]" & Len(s) & ") = '" & s & "'"
      Else
        s = ";"
      End If
      .RecordSource = "SELECT КодСисБлок, НаимСисБлок, СерНом FROM [Запрос_Поиск]" & s
      .Requery 
    End With

End Sub



Донные которые изменяются:

ПоискСерНом - имя поля в которое вводится искомый номер
Форм_Поиск - подчиненная форма в которой ищем номер
СерНом - имя поля в форме Форм_Поиск
"SELECT КодСисБлок, НаимСисБлок, СерНом FROM [Запрос_Поиск]" - Запрс 

Прошу прощения если что непонятно написал, спросите перефразирую текст или до полню.
Спасибо!



Автор: bopoha 25.5.2007, 00:01
В чем именно проблема? Объявить параметры или ....? Что в запросе меняется?

Автор: Dipresiy 25.5.2007, 05:34
Да, объявить переменные. Вот к примеру какие данные будут меняться:

1.  ПоискСерНом - имя поля в которое вводится искомый номер
     Форм_Поиск - подчиненная форма в которой ищем номер
     СерНом - имя поля в форме Форм_Поиск
    "SELECT КодСисБлок, НаимСисБлок, СерНом FROM [Запрос_Поиск]" - Запрс 

2.  ПоискСерНом1 
     Форм_Поиск1 
     СерНом1 
     "SELECT КодМон, НаимМон, СерНом1 FROM [Запрос_Поиск1]" - Запрс 

3. ПоискСерНом2 
    Форм_Поиск2 
    СерНом2 
    "SELECT КодПрин, НаимПрин, СерНом2 FROM [Запрос_Поиск2]" - Запрс 

и так далее, так как текст программы за исключением этих 4-ч составляющих не меняется вот я и реши сварганить процедурку, но к сожаленеию знаний моих нифига не хватает, я уже 2-ю неделе по книжкам да по help-ам...!  Вообщем я понимаю вот как енто длжно выглядеть:

Код

Private Sub Poisk(PoiskSerNom as...,FormName as..., SerNomer as...,ZaprSQL as ...)
Dim s As String
    s = Me.PoiskSerNom.Text                                      ' определяем вводимый текст
    With Me.FormName.Form                                       ' определяем форму 
      If Len(s) <> 0 Then
        s = " WHERE Left(SerNomеr" & Len(s) & ") = '" & s & "'"   
      Else
        s = ";"
      End If
      .RecordSource = ZaprSQL & s                               ' определяем запрос по введенному тексту s 
      .Requery                                                        ' обновление запроса
    End With

End Sub


Private Sub ПоискСерНом_Change()
Dim ZaprSQL as ...

ZaprSQL = "SELECT КодСисБлок, НаимСисБлок, СерНом FROM [Запрос_Поиск]" 

Poisk(ПоискСерНомСисБлок,Форм_Поиск_СистемныйБлок,СерСисБлок,ZaprSQL)

End



Вот чтото в этом роде! Троеточее после as это вот как раз я и незнаю какого типа переменная т.е.как её объявить.

Вот пример для простоты понимания:


Автор: Dipresiy 28.5.2007, 08:03
Уважаемые знатоки, неужели задачка такая сложная???

Есть у кого какие мысли, какого типа должны быть переменные?

 

Автор: bopoha 28.5.2007, 08:49
Я систему поиска реализовал следующим образом.
1. форма поиска. 
2. функция форимрования условия (работает на основании настройки: имя поля формы - имя поля в базе). 
3. форма просмотра результата поиска (на форму поиска накладывается фильтр).

Это позволяет реализовать любой поиск за короткий срок.

В твоем случае:
Код

Public Sub Poisk(Byval stSerNom as String, byref frmPoiskRez as Form, ByVal imPlSerNomer as String, stSQLRcdSrc as String)
' stSerNom        - среийный номер
' frmPoiskRez    - ссылка на форму
' imPlSerNomer - имя поля в таблице, по которому производится поиск

      Dim stWhere as String

      If Len(stSerNom) <> 0 Then
        stWhere = " WHERE Left(" & imPlSerNomer & ", " & Len(stSerNom) & ") = '" & stSerNom & "'"   
      End If

      frmPoiskRez.RecordSource = stSQLRcdSrc & stWhere & ";"
End Sub


PS: помести ее в отдельный модуль.

Автор: Dipresiy 28.5.2007, 11:02
Благодарю bopoha!

Но либо Я торможу, либо торможу Я!!!  

Код


Private Sub ПоискСерНомСисБлок_Change()
Dim stSQL As String

  stSQL = "SELECT КодСисБлока, НаимСисБлок, СерСисБлок, ИнвНомерСисБлок FROM [Запр_Поиск_СистемныйБлок]"

  Poisk (ПоискСерНомСисБлок,Форм_Поиск_СистемныйБлок,СерСисБлок, stSQL) '-вся строка красная и сообщение Compile error: Expected:= 

End Sub


Что я не так сделал??? Процедуру и в модуль выносил и тамже где ее вызываю оставлял - один фиг ошибка, а где косяк понять не могу.  

Автор: Akina 28.5.2007, 13:21
Цитата(Dipresiy @  28.5.2007,  12:02 Найти цитируемый пост)
вся строка красная и сообщение Compile error: Expected:= 

Забыто ключевое слово Call

Автор: Dipresiy 31.5.2007, 13:29
Точно!   smile 

Теперь все работает!

Выражаю огромную благодарность и мое почтение Вам господа!!!  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)