Я думаю в любой базе данных необходим поиск каких либо данных…
Те кто давно работает с VBA Access наверняка знают свойство формы RecordSource («источник записей» в графическом отображении свойств формы).
Этому свойству присваивается текстовое значение в виде запроса либо названия таблицы для дальнейшей обработки данных на форме.
Собственно на этом и построена данное решение…
VBA Access ::: Форма поиска
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.
-------
Продаются мужские часики. Один часик - 50 долларов.
Вот так у меня выглядит форма поиска сотрудника
Последний раз редактировалось dBaser Ср май 11, 2005 9:18, всего редактировалось 2 раза.
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.
-------
Продаются мужские часики. Один часик - 50 долларов.
При обновлении какого либо поля на форме либо по нажатию на кнопку обновить обновляется список сотрудников в подформе. Это достигается тем что после выполнения события «После обновления» вызывается функция RequerySubform().
Код: Выделить всё
Public Function RequerySubform()
‘-- Объявление переменных
Dim strPurchaseDateSQL As String
Dim strWhereSQL As String
Dim strFullSQL As String
Dim strVidRabotSQL As String
Dim strSearchSQL As String
'-- Если выбрано авто обновление или нажата кнопка обновить
'-- то обновить содержание подформы
If Me!optAutoRequery Or Screen.ActiveControl.Name = "cmdRequery" Then
‘—- Вызов вспомогательных функций и присвоение объявленным переменным полученное значение
‘—- Каждая вспомогательная функция возвращает кусок SQL запроса содержащий параметр отбора
strVidRabotSQL = IncludeVidRabot()
strPurchaseDateSQL = IncludePurchaseDate()
‘—- Сюда подставляется значение из поля находящегося в области с переключателями
strSearchSQL = IncludeSearch()
‘—- Начало формирования условий запроса
strWhereSQL = "Where "
‘—- Дальше идет одинаковая проверка для каждой переменной: Если пользователь ввел значение в определенное поле на форме, то проверить были ли добавлены условия запроса ранее и добавить параметр.
If Len(strVidRabotSQL) <> 0 Then
If strWhereSQL <> "Where " Then
strWhereSQL = strWhereSQL & " And "
End If
strWhereSQL = strWhereSQL & strVidRabotSQL
End If
If Len(strSearchSQL) <> 0 Then
If strWhereSQL <> "Where " Then
strWhereSQL = strWhereSQL & " and "
End If
strWhereSQL = strWhereSQL & strSearchSQL
End If
If Len(strPurchaseDateSQL) <> 0 Then
If strWhereSQL <> "Where " Then
strWhereSQL = strWhereSQL & " And "
End If
strWhereSQL = strWhereSQL & strPurchaseDateSQL & ";"
End If
'-- Если не было выбрано параметров поиска, то количество записей равно 0 (подформа пустая)
If strWhereSQL = "Where " Then
strWhereSQL = "Where False;"
End If
'-- Создание новой SQL Строки и присвоение ее источнику записей
strFullSQL = "Select * From tblSotrudnik " & strWhereSQL
Me!subfrmSearch.Form.RecordSource = strFullSQL
' Debug.Print strFullSQL ‘—раскоментировав начало этой строки можно увидеть получившийся запрос в окне Immediate
'-- Установить цвет кнопки "Обновить" черным
Me!cmdRequery.ForeColor = 0
Else
'-- Установить цвет кнопки "Обновить" красным
Me!cmdRequery.ForeColor = 255
End If
End Function
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.
-------
Продаются мужские часики. Один часик - 50 долларов.
Вспомогательные функции:
Возвращает параметр для запроса если поле даты не пустое
Если поле со списком не пустое либо не выбрано "<< ВСЕ >>" , то возвращает условие для запроса, иначе пустую строку
А эта функция возвращает параметр в зависимости от выбраного переключателя...
На форме можно вводить параметр целиком либо начальные символы
По нажатию на кнопку "ОБновить"
По нажатию на кнопку "Очистить"
После обновления переключателей АВТООБНОВЛЕНИЯ
Возвращает параметр для запроса если поле даты не пустое
Код: Выделить всё
Private Function IncludePurchaseDate() As String
'-- Создание условия по дате для SQL запроса
If Not IsNull(Me!txtBegPurchaseDate) Then
'Debug.Print "готово"
IncludePurchaseDate = "(tblSotrudnik.kontrakt_data >= Forms!frmSearch!txtBegPurchaseDate )"
End If
End Function
Если поле со списком не пустое либо не выбрано "<< ВСЕ >>" , то возвращает условие для запроса, иначе пустую строку
Код: Выделить всё
Private Function IncludeVidRabot() As String
Dim strTemp As String
Dim varCategory As Variant
If (Me!spisokVidRabot = "<< ВСЕ >>") Or IsNull(Me!spisokVidRabot) Then
strTemp = ""
Else
strTemp = "[vid_rabot] = '" & Me!spisokVidRabot & "'"
End If
IncludeVidRabot = strTemp
End Function
А эта функция возвращает параметр в зависимости от выбраного переключателя...
Код: Выделить всё
Public Function IncludeSearch() As String
' устанавливает в предложение Where параметры
' отбора записей ,
Dim strTemp As String
Dim strPole As String
If Not IsNull(Me!pSearch) Then
If Me!grpSearch = 1 Then
strPole = "familiya"
End If
If Me!grpSearch = 2 Then
strPole = "inn"
End If
If Me!grpSearch = 3 Then
strPole = "tab_numb"
End If
If Me!grpSearch = 4 Then
strPole = "passport_nomer"
End If
If Me!grpSearch = 5 Then
strPole = "kontrakt_nomer"
End If
If Me!grpSearch = 6 Then
strPole = "Insurance_numb"
End If
If Me!pSearch <> "" Then
strTemp = strTemp & "tblSotrudnik." & strPole & " Like '" & Me!pSearch & "*'"
IncludeSearch = "" & strTemp & ""
End If
Else
IncludeSearch = ""
End If
End Function
По нажатию на кнопку "ОБновить"
Код: Выделить всё
Private Sub cmdData_Click()
Dim ctlDate As TextBox
Dim varReturn As Variant
Set ctlDate = Me!txtBegPurchaseDate
varReturn = acbGetDate(ctlDate.Value)
If Not IsNull(varReturn) Then
ctlDate = varReturn
End If
End Sub
По нажатию на кнопку "Очистить"
Код: Выделить всё
Private Sub cmdClear_Click()
Dim varDummy As Variant
Dim intCurrCat As Integer
'-- Очистить все критерии отбора
Me!pSearch = Null
Me!txtBegPurchaseDate = Null
Me!spisokVidRabot = Null
'-- Обновить источник записей для подформы
varDummy = RequerySubform()
End Sub
После обновления переключателей АВТООБНОВЛЕНИЯ
Код: Выделить всё
Private Sub optAutoRequery_AfterUpdate()
Dim varDummy As Variant
If Me!optAutoRequery Then
varDummy = RequerySubform()
End If
End Sub
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.
-------
Продаются мужские часики. Один часик - 50 долларов.
Alex6, согласен...
вот это дело можно заменить на кейсы...
а вообще тут представлен рабочий пример, которы очень может помочь начинающим... а если использовать технологию rushmore, то можно добиться хорошей скорости даже в больших базах
вот это дело можно заменить на кейсы...
Код: Выделить всё
If Me!grpSearch = 1 Then
strPole = "familiya"
End If
If Me!grpSearch = 2 Then
strPole = "inn"
End If
If Me!grpSearch = 3 Then
strPole = "tab_numb"
End If
If Me!grpSearch = 4 Then
strPole = "passport_nomer"
End If
If Me!grpSearch = 5 Then
strPole = "kontrakt_nomer"
End If
If Me!grpSearch = 6 Then
strPole = "Insurance_numb"
End If
а вообще тут представлен рабочий пример, которы очень может помочь начинающим... а если использовать технологию rushmore, то можно добиться хорошей скорости даже в больших базах
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.
-------
Продаются мужские часики. Один часик - 50 долларов.
Re: VBA Access ::: Форма поиска
Heloo
Как я могу instaal эти коды? помогите мне ....
Как я могу instaal эти коды? помогите мне ....