Добрый день, Галина.
Г> Пыталась сделать запрос, но что-то не получилось.
что значит "что-то не получилось"?
как Вы запрос делали?
а вообще...
'надо описать базу данных:
Dim dbs As Database
'и "набор записей" - временную таблицу, в которой у Вас будут храниться
'результаты запроса:
Dim rst As Recordset
Dim strSQL As String ' строка SQL-запроса
Dim str_tmp As String ' переменная строка - для формирования SQLзапроса
Dim ctrl_sum As Integer
'зададим БД - текущей:
Set dbs = CurrentDb()
'стандартная шапка запроса:
strSQL = "SELECT * FROM [название таблицы] "
'*************************************************
' теперь будем добавлять к strSQL - нужные нам условия.
' пусть поля находятся на форме Form1 и называются соответственно
' Text1, Text2, ..., Text7
'
' единственная проблема может возникнуть - если ни одно из полей не
' заполнено - тогда параметр WHERE в SQL запросе вообще не будет
' нужен. надо просто обработать этот случай отдельно. Для этого после
' проверки каждой строки - в случае, если поле не заполнено - будем
' увеличивать некую контрольную сумму на 1 (ctrl_sum) - и если ее
' значение после прохождения всех полей будет совпадать с их
' количеством - просто не будем добавлять никаких условий в
' sql-запрос. Ну или - как Вам по смыслу лучше подойдет. можно вообще
' такой запрос не обрабатывать, а выдавать ошибку.
'*************************************************
str_tmp = ""
ctrl_sum = 0
If (Forms![From1]![Text1].Value <> "") Then
str_tmp = str_tmp & " [Field1]=" & Form1![Text1]
Else
ctrl_sum = ctrl_sum + 1
End If
If (Forms![From1]![Text1].Value <> "") Then
If (ctrl_sum > 0) Then
str_tmp = str_tmp & " AND "
End If
str_tmp = str_tmp & " [Field1]=" & Form1![Text1]
Else
ctrl_sum = ctrl_sum + 1
End If
' ............
' ... то же самое для 3, 4, 5, 6 полей
' ............
If (Forms![From1]![Text7].Value <> "") Then
If (ctrl_sum > 0) Then
str_tmp = str_tmp & " AND "
End If
str_tmp = str_tmp & " [Field7]=" & Form1![Text7]
Else
ctrl_sum = ctrl_sum + 1
End If
If (ctrl_sum < 7) Then
strSQL = strSQL & " WHERE " & str_tmp
Else
' если считаем, что все незаполненные поля - это ошибка, - то
' ругаемся тут. если ругаться не хотим - можно убрать Else
End If
' запускаем SQL-запрос на выполнение
Set rst = dbs.OpenRecordset(strSQL)
If (rst.EOF) Then
Form1![Label1].Caption = "По Вашему запросу ничего не найдено"
Else
While (Not (rst.EOF))
' действия с каждой найденной записью (строкой) -
' отдельно в формате rst.Field(номер_столбца_таблицы)
rst.MoveNext
Wend
End If
' завершаем работу с переменными:
rst.Close
dbs.Close
' сбрасываем "указатель" на БД
Set dbs = Nothing
Насчет того, как в таблицу результаты выводить.
Можно - взять "список", добавить в него столбцы - и в том цикле,
который идет по полученным записям - добавлять эти записи в список.
Несколько колонок он допускает.
Или - можно сохранить результаты запроса в Query (спросите, как это
делать, у Справки) - и потом с помощью мастера связать список с этим
запросом.
Нумерация столбцов таблицы - если мне память не изменяет - ведется с
единицы. но - проверьте на всякий случай.