Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Access - VBA

Всем привет!
Если кто может помогите, хотя бы намекните.
Проблема заключается вот в следующем:
необходимо организовать поиск в некоторой таблице по нескольким полям (от 1-7).
Т.е. на форме находятся семь текстовых полей и по введенным значениям в любых
из этих полей (это может быть 2, 3, ... или даже все 7) при нажатии на кнопку,
если в таблице найдены записи удовлетворяющие одновременно всем заданным полям,
появлялась таблица с итогами поиска.
Пыталась сделать запрос, но что-то не получилось. Потом через фильтр, но тоже
что-то никак. Так что чем можете помогите.
И еще вопрос, есть ли в Access возможность записи макроса по произведенным действиям.

-***-
Best regards,
Galina mailto:SGal***@i*****.ru

Номер выпуска : 3821
Возраст листа : 430 (дней)
Количество подписчиков : 507
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/269959
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Wed, 24 Nov 2004 23:39:19 +0300 (#269959)

 

Ответы:

Добрый день, Галина.

что значит "что-то не получилось"?
как Вы запрос делали?
а вообще...

'надо описать базу данных:
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 (спросите, как это
делать, у Справки) - и потом с помощью мастера связать список с этим
запросом.

Нумерация столбцов таблицы - если мне память не изменяет - ведется с
единицы. но - проверьте на всякий случай.

Ответить   Thu, 25 Nov 2004 14:09:24 +0300 (#270487)

 

Привет Галина,

Wednesday, November 24, 2004, 11:39:19 PM, вы писали:

1-7).

полям,

Я думаю вот такой SQL запросик Вам поможет

SELECT *
FROM Table //ваша таблица
WHERE (pole1 LIKE "%str1%")
AND (pole2 LIKE "%str2%")
.........................
AND (pole7 LIKE "%str7%")

Запрос лучше создавать динамически, при этом строки с пустыми
занчениями (strN = '') лучше опускать
Вместо strN лучше сразу вписывать значения, но можно работать и с
параметрами (но это ненамного сложнее)
Для простоты создания при незвестном количестве условий можно
использовать искуственный метод:
WHERE (True<>False)
AND (.....)
Если все строки пусты (выборка не производится), то будет выводится
вся таблица
Знак "%" аналогичен знаку "*" при поиске файла

Афоризм напоследок: Столько дел, что и работой занятся некогда...
25 ноября 2004 г. 20:16:36

Просто студент
Eugene mailto:rav***@o*****.ru

Номер выпуска : 3829
Возраст листа : 432 (дней)
Количество подписчиков :
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/271199
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Thu, 25 Nov 2004 20:27:13 +0300 (#271199)