Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск данных по ряду текстовых полей формы.
 
 автор: NewMaN   (07.02.2008 в 23:33)   личное сообщение
 
 

Здравствуйте! Столкнулся со следующей проблемой...
Необходимо в таблице найти все записи, числовые значения которых находятся в пределах, указываемых в текстовых полях формы. Поиск производить одновременно по 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 >
я так и сделал, но наверно неправильно в запросе указываю на функцию (точнее не знаю как)...вообщем запрос пустой получаю.

По нажатию кнопки, вызвывается отчет, который строится вот по этому запросу.

У кого какие есть мысли? Может это можно гораздо проще реализовать и как можно вообще... Спасибо!

  Ответить  
 
 автор: ГлазастыйМышь   (08.02.2008 в 00:37)   личное сообщение
 
 

может попробывать конструкцию типа

stg.[5C]>=Nz(Forms!stgn.Controls!stg_profile.Form.Controls!lstg5.Value, 0) 

т.е если переменная заполнена, то подставляется ее значение, если нет, то 0 (или другое указанное число)

  Ответить  
 
 автор: NewMaN   (08.02.2008 в 00:49)   личное сообщение
 
 

Огромное спасибо!

  Ответить  
 
 автор: NewMaN   (13.02.2008 в 22:42)   личное сообщение
 
 

Такой запрос нормально работал, но в процессе разработки оказалось, что необходимо также, чтобы запрос извлекал записи из таблицы, даже если одно-два из полей (в таблице) не содержат данных. При данной конструкции, такую запись найти невозможно :( Не подскажите как быть?

  Ответить  
 
 автор: osmor   (14.02.2008 в 08:32)   личное сообщение
 
 


nz(stg.[5C],0)>=Nz(Forms!stgn.Controls!stg_profile.Form.Controls!lstg5.Value, 0) 

  Ответить  
 
 автор: NewMaN   (18.02.2008 в 23:54)   личное сообщение
 
 

Спасибо! Это работает хорошо!
Появилась новая задача, и потяряв несколько часов так и не смог её решить...
Сделать запрос с LIKE *значения_тектового_поля*. Как я ни ухищрялся но работает только конструкция типа
WHERE stg.stuff LIKE Forms!stgn.Controls!stg_profile.Form.Controls!stuff.Value
Но соответственно, выбирается запись точно соответствующая значению в поле, а нужно сделать маску *слева и справа* значения ... Ничего не получается. Может через функцию какую-то надо?

  Ответить  
 
 автор: osmor   (19.02.2008 в 08:56)   личное сообщение
 
 


WHERE stg.stuff LIKE "*" & Forms!stgn!stg_profile.Form!stuff & "*"


Новые вопросы лучше задавать в новых темах

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList