|
|
|
| Всем доброго времени.
Возник вопрос - есть запрос в котором идет отбор определенных записей с использованием предикта "In" .... попытался в конструкторе вложить ссыль на поле формы в которой поименованы через запятую все нужные контрагенты ... не работает
Вообщем нужен пинок в сторону как реализовать возможность передачи в IN() значений из одного поля формы .....
да ... тапками сразу не нать кидатся ... хелпы и факи читал ... | |
|
| |
|
|
|
| правим запрос под свои нужды
CurrentDb.QueryDefs("Запрос1").SQL = "Select......From.....Where Таблица.Поле in(" & Forms!форма1!поле1 & ")"
открываем запрос любым удобным способом
в поле на форме данные вводить через запятую
если текст - то выделять апострофами ( ' ) | |
|
| |
|
|
|
| Только учтите что
CurrentDb.QueryDefs("Запрос1").SQL
переписывает и сохраняет запрос
если нужно сохранение запроса в каком-то первобытном виде
то операцию нужно будет повторить взад на каком-то событии | |
|
| |
|
|
|
|
в поле на форме данные вводить через запятую
если текст - то выделять апострофами ( ' )
|
значит только через вба .... эх .... да еще и в поле формы вводить апострофы ... ну какой пользователь - та справится ...
а других вариантов значит нет ... думал попростецки обойтись ... анако не выйдет | |
|
| |
|
|
|
| Можно через глобальную переменную или коллекцию.
Где-то в общем модуле объявляете
Public GL_Param As Variant '(Или String, Long, ...)
Public Function fGl_Param() as variant
fGl_Param =Gl_Param
End Function
'=======================
В форме перед вызовом запроса
Gl_Param=me.Имяполя
В запросе: подставляете в нужное место fGl_Param - именно функцию но не глоб перем. | |
|
| |
|
|
|
| а использовать нужно именно конструкцию in в запросе
можно ведь or
и другой вопрос
а почему нельзя использовать для выбора например Список с мультиселектом
почему поле | |
|
| |
|
|
|
| Во первых, можно вводить в поле через запятую
Во вторых значения, введенные в поле через запятую можно преобразовать в массив
с помощью функции SPLIT([string], [delimiter])
В третьих можно в цикле обработать элементы полученного массива, в частности, обрамить апострофами или двойными кавычками; и в итоге получить необходимую конструкцию IN(1;2;3)
---
Или вам сразу код написать?
Sub splitstr()
Dim ar As Variant, i&, str_In$, s$
s = "один, два, три, четыре, пять"
ar = Split(s, ",")
For i = 0 To UBound(ar)
str_In = str_In & ",'" & Trim(ar(i)) & "'"
Next i
Debug.Print "IN (" & Mid(str_In, 2) & ")"
' получаем: IN ('один','два','три','четыре','пять')
End Sub
|
| |
|
| |
|
|
|
| В сохраненном запросе:
WHERE (((Eval([Таблица].[Поле] & " In (" & [Forms]![форма1]![поле1] & ")"))=True)); | |
|
| |
|
|
|
| Анатолий , нужно именно в сохраненном запросе
но у меня почему-то эта конструкция не работет ... говорит что нужно разделить ее а то слишком сложно считать | |
|
| |
|
|
|
| Народ ... вообщем попробовал варианты ...
Анака тема такая - пользователь должен в форме указать несколько номеров платежек и врезультате по ним получить всю информацию по договорам ... список подключать смысла нет. а потому нужен сохраненный жесткий запрос принимающий в качестве параметра строку из формы с перечислением номеров платежек (одна недолга ... номера платежек хранятся в текством формате) я уже все перепробовал ... ни хр@на не получатся ...может не в том направлении копаю? тада дайте валшебнага пенделя ... А ... | |
|
| |
|
18 Кб. |
|
| Вот один из вариантов
(поюзал функцию Йожыка) | |
|
| |
|
|
|
|
select * from tab1
where instr("," & [param1] & ",","," & nplat & ",")>0
|
| |
|
| |
|
|
|
| Может я слабо въезжаю в то, что надо, но... Согласно примера снипа получается, что есть платежки и нужно только перечислить номера. Вот пользователь будет думать что там запятую, тире, многоточие....
Не проще ли поставить логическое поле, в котором он будет отмечать нужные, потом запрос по логическому полю "Да" или -1...
И после чего это поле обнуляется. Легче было бы сделать поле свободным. Отметил, прошел рекордсетом и выдал инфу, (открывается ленточная форма на этот запрос). По ее закрытии в форме все да изменились на нет. (или по нажатии кнопки запуска запроса все на нет) | |
|
| |