Есть таблица, в ней нужно провести поиск по нескольким полям. При этом одно поле зависит от другого. Как это сделать указано в это примере (..\15 Формы\la_from.accdb\02. Поиск по нескольким полям).
'==============================================================
' Поиск по дате
Private Sub Дата_AfterUpdate()
Dim rst As Recordset, frm As Form
On Error GoTo 999
Set frm = Me.формаПоиск.Form 'Выбираем форму
Set rst = frm.RecordsetClone 'Выбираем таблицу
rst.FindFirst "([Дата]=#" Format(Me.Дата, "mm\/dd\/yyyy") "#)"
If rst.NoMatch = False Then
frm.Bookmark = rst.Bookmark
Me.Книга = rst!Книга
Else
MsgBox "Нет данных!"
End If
Exit Sub
999:
MsgBox Err.Description vbNewLine "Введите правильно данные?"
End Sub
'==============================================================
' Начать поиск после обновления
Private Sub Книга_AfterUpdate()
recordFind
End Sub
'==============================================================
' Поиск по дате и книге
Private Sub recordFind()
Dim rst As Recordset, frm As Form, s As String
On Error GoTo 999
Set frm = Me.формаПоиск.Form 'Выбираем форму
Set rst = frm.RecordsetClone 'Выбираем таблицу
s = "([Дата]=#" Format(Me.Дата, "mm\/dd\/yyyy") _
"#) and (Книга='" Me.Книга "')"
rst.FindFirst s
If rst.NoMatch = False Then
frm.Bookmark = rst.Bookmark
Else
MsgBox "Нет данных!"
End If
Exit Sub
999:
MsgBox "Введите правильно данные?"
End Sub
'==============================================================
' Поиск по шаблону
Private Sub Шаблон_AfterUpdate()
Dim rst As Recordset, frm As Form, s As String
On Error GoTo 999
Set frm = Me.формаПоиск.Form 'Выбираем форму
Set rst = frm.RecordsetClone 'Выбираем таблицу
rst.FindFirst "([Книга] Like '" Me.Шаблон "')=True"
If rst.NoMatch = False Then
frm.Bookmark = rst.Bookmark
Else
MsgBox "Нет данных!"
End If
Exit Sub
999:
MsgBox "Введите правильно данные?"
End Sub
'==============================================================
' Запрос по книге
Private Sub Книга_Enter()
Me.Книга.RowSource = "SELECT Книга FROM [1-Мои книги] WHERE (((Дата)=[Forms]![Example 01]![Дата]));"
'Me.Книга.Requery 'Изменить запрос
End Sub
12. При разработке баз данных очень часто встречаются случаи, когда необходимо автоматическим способом заполнить поля в форме. Это показано в этом примере (..\15 Формы\la_from2.accdb\12. Заполнение реквизитов предприятия)
'==============================================================
' Заполнение реквизитов
Private Sub allFirms_AfterUpdate()
Dim rst As Recordset
On Error GoTo 999
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [Фирмы] WHERE [Фирма]='" Me.allFirms "'")
If rst.RecordCount 0 Then
With rst
'Форму Вы можете связать �� таблицей
Me.Фирма = rst!Фирма
Me.Банк = rst!Банк
Me.Счет = rst!Счет
Me.КорСЧЕТ = rst!КорСчет
End With
End If
rst.Close
Exit Sub
999:
MsgBox Err.Description
Err.Clear
End Sub
' Определяем максимальный номер документа
Private Sub Form_Current()
If Me.NewRecord = True Then
Me.Nдок.DefaultValue = 1 + funGetMaxNumber("SELECT Max([Nдок]) as NN FROM [Пример 12]")
End If
End Sub
'==============================================================
' Получаем максимальное число
Function funGetMaxNumber(sSQL As String) As Long
Dim dbs As Database, rst As Recordset
funGetMaxNumber = 0
On Error GoTo 999
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(sSQL)
If rst.RecordCount 0 Then
funGetMaxNumber = rst![NN]
End If
rst.Close
Exit Function
999:
Err.Clear
End Function
02. Есть таблица, в ней нужно провести поиск по нескольким полям. При этом задача должна решаться так, ввели 1 символ, таблица изменилаcь и показала все записи, где есть эта фраза (..\15 Формы\la_from.accdb\03. Контекстный поиск)
Option Compare Binary
Option Explicit
'Option Compare Text
'***************************************************************
' 3. Пример. Как создать контекстный поиск в Access
' (смотрите также пример 2) ?
'***************************************************************
'==============================================================
' Открытие формы
Private Sub Form_Open(Cancel As Integer)
Me.myFind3.Form.RecordSource = "SELECT Книга FROM [1-Мои книги]"
End Sub
'==============================================================
' Поиск с отбором книг
Private Sub myBooks_Change()
Dim s As String
s = Me.myBooks.Text 'Определяем текст
With Me.myFind3.Form 'Выбираем форму
If Len(s) 0 Then
s = " WHERE Left([Книга]," Len(s) ") = '" s "'"
Else
s = ";"
End If
.RecordSource = "SELECT Книга FROM [1-Мои книги]" s
.Requery 'Меняем запрос
End With
End Sub
'==============================================================
' Контекстный поиск по книге
Private Sub Books_Change()
Dim rst As Recordset, frm As Form, s As String
On Error GoTo 999
Set frm = Me.myFind3.Form 'Выбираем форму
Set rst = frm.RecordsetClone 'Выбираем таблицу
rst.FindFirst "([Книга] Like '" Me.Books.Text "*')=True"
If rst.NoMatch = False Then
frm.Bookmark = rst.Bookmark
End If
Exit Sub
999:
MsgBox "Введите правильно данные?"
End Sub
Сторнирование - это возврат денежных средств, отображается красным цветом. Смотрите как это можно сделать из VBA (..\15 Формы\la_from.accdb\01. Сторнирование бухгалтерских операций)
With [Form_Пример 01 пдч].Сумма
.Format = "0.00;0.00[Red]" 'Красный цвет в поле
End With