|
|
|
| Здравствуйте! Столкнулся со следующей проблемой...
Необходимо в таблице найти все записи, числовые значения которых находятся в пределах, указываемых в текстовых полях формы. Поиск производить одновременно по 10-ти полям.
Я сделал так: создал запрос, который впринципе работает, НО, если пользователь не ввел в одно из полей значение, то запрос не находит ни одной записи. Тоесть нужно сделать так, чтобы в запрос не включались текстовые поля, которые остались пустыми.
(поля lstg5, lstg10 и тд. - минимальное значение; поля hstg5, hstg10 - максимальные, соответственно) Данные находятся в подчиненной форме.
SELECT *
FROM sample, stg
WHERE stg.stg_id=sample.sample_id And
stg.[5C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg5.Value And
stg.[5C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg5.Value And
stg.[10C]<=Forms!stgn.Controls!stg_profile.Form.Controls!lstg10.Value And
stg.[10C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg10.Value And
stg.[15C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg15.Value And
stg.[15C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg15.Value And
stg.[20C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg20.Value And
stg.[20C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg20.Value And
stg.[25C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg25.Value And
stg.[25C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg25.Value And
stg.[30C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg30.Value And
stg.[30C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg30.Value And
stg.[35C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg35.Value And
stg.[35C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg35.Value And
stg.[40C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg40.Value And
stg.[40C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg40.Value And
stg.[45C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg45.Value And
stg.[45C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg45.Value And
stg.[50C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg50.Value And
stg.[50C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg50.Value And
stg.[55C]>=Forms!stgn.Controls!stg_profile.Form.Controls!lstg55.Value And
stg.[55C]<=Forms!stgn.Controls!stg_profile.Form.Controls!hstg55.Value;
|
Я еще новичек, поэтому сильно не смейтесь, вполне возможно запрос можно было сделать менее громоздким, но я не знаю.
У меня есть лишь одна бредовая идея по реализации задуманного - данные из тектовых полей формы вытягивать в отдельные переменные, и в случае, если поле пустое - применить значение минимального пустого поля = "0" а максимального = "9999". Но у меня не вышло, потому что плохо понимаю как включить название функции в запрос. Нашел в одном справочнике по использованию переменных в запросе следующее:
<Часто встает задача в условии SQL запроса использовать значение из переменной.
На прямую это невозможно сделать, но можно подставить в условие название функции которая возвращает значение требуемой переменной.
Public Function GetValue()
GetValue = variablename
End Function >
я так и сделал, но наверно неправильно в запросе указываю на функцию (точнее не знаю как)...вообщем запрос пустой получаю.
По нажатию кнопки, вызвывается отчет, который строится вот по этому запросу.
У кого какие есть мысли? Может это можно гораздо проще реализовать и как можно вообще... Спасибо! | |
|
| |
|
|
|
| может попробывать конструкцию типа
stg.[5C]>=Nz(Forms!stgn.Controls!stg_profile.Form.Controls!lstg5.Value, 0)
|
т.е если переменная заполнена, то подставляется ее значение, если нет, то 0 (или другое указанное число) | |
|
| |
|
|
|
|
| Такой запрос нормально работал, но в процессе разработки оказалось, что необходимо также, чтобы запрос извлекал записи из таблицы, даже если одно-два из полей (в таблице) не содержат данных. При данной конструкции, такую запись найти невозможно :( Не подскажите как быть? | |
|
| |
|
|
|
|
nz(stg.[5C],0)>=Nz(Forms!stgn.Controls!stg_profile.Form.Controls!lstg5.Value, 0)
|
| |
|
| |
|
|
|
| Спасибо! Это работает хорошо!
Появилась новая задача, и потяряв несколько часов так и не смог её решить...
Сделать запрос с LIKE *значения_тектового_поля*. Как я ни ухищрялся но работает только конструкция типа
WHERE stg.stuff LIKE Forms!stgn.Controls!stg_profile.Form.Controls!stuff.Value
Но соответственно, выбирается запись точно соответствующая значению в поле, а нужно сделать маску *слева и справа* значения ... Ничего не получается. Может через функцию какую-то надо? | |
|
| |
|
|
|
|
WHERE stg.stuff LIKE "*" & Forms!stgn!stg_profile.Form!stuff & "*"
|
Новые вопросы лучше задавать в новых темах | |
|
| |