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

Форум: MS ACCESS

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

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

 
 

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

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

тема: А-2007: Передача параметра из формы в запрос
 
 автор: Clerkus   (03.04.2012 в 19:28)   личное сообщение
 
 

Всем доброго времени.
Возник вопрос - есть запрос в котором идет отбор определенных записей с использованием предикта "In" .... попытался в конструкторе вложить ссыль на поле формы в которой поименованы через запятую все нужные контрагенты ... не работает
Вообщем нужен пинок в сторону как реализовать возможность передачи в IN() значений из одного поля формы .....
да ... тапками сразу не нать кидатся ... хелпы и факи читал ...

  Ответить  
 
 автор: snipe   (03.04.2012 в 19:50)   личное сообщение
 
 

правим запрос под свои нужды

CurrentDb.QueryDefs("Запрос1").SQL = "Select......From.....Where Таблица.Поле in(" & Forms!форма1!поле1 & ")"

открываем запрос любым удобным способом
в поле на форме данные вводить через запятую
если текст - то выделять апострофами ( ' )

  Ответить  
 
 автор: snipe   (03.04.2012 в 20:00)   личное сообщение
 
 

Только учтите что
CurrentDb.QueryDefs("Запрос1").SQL
переписывает и сохраняет запрос
если нужно сохранение запроса в каком-то первобытном виде
то операцию нужно будет повторить взад на каком-то событии

  Ответить  
 
 автор: Clerkus   (03.04.2012 в 21:27)   личное сообщение
 
 


в поле на форме данные вводить через запятую
если текст - то выделять апострофами ( ' )


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

  Ответить  
 
 автор: Дядя Федор   (04.04.2012 в 08:11)   личное сообщение
 
 

Можно через глобальную переменную или коллекцию.
Где-то в общем модуле объявляете
Public GL_Param As Variant '(Или String, Long, ...)
Public Function fGl_Param() as variant
fGl_Param =Gl_Param
End Function
'=======================

В форме перед вызовом запроса
Gl_Param=me.Имяполя
В запросе: подставляете в нужное место fGl_Param - именно функцию но не глоб перем.

  Ответить  
 
 автор: snipe   (04.04.2012 в 08:25)   личное сообщение
 
 

а использовать нужно именно конструкцию in в запросе
можно ведь or

и другой вопрос
а почему нельзя использовать для выбора например Список с мультиселектом
почему поле

  Ответить  
 
 автор: Йожык   (04.04.2012 в 09:43)   личное сообщение
 
 

Во первых, можно вводить в поле через запятую

Во вторых значения, введенные в поле через запятую можно преобразовать в массив
с помощью функции 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

  Ответить  
 
 автор: Анатолий (Киев)   (04.04.2012 в 14:07)   личное сообщение
 
 

В сохраненном запросе:
WHERE (((Eval([Таблица].[Поле] & " In (" & [Forms]![форма1]![поле1] & ")"))=True));

  Ответить  
 
 автор: Clerkus   (04.04.2012 в 19:49)   личное сообщение
 
 

Анатолий , нужно именно в сохраненном запросе
но у меня почему-то эта конструкция не работет ... говорит что нужно разделить ее а то слишком сложно считать

  Ответить  
 
 автор: Clerkus   (07.04.2012 в 21:16)   личное сообщение
 
 

Народ ... вообщем попробовал варианты ...
Анака тема такая - пользователь должен в форме указать несколько номеров платежек и врезультате по ним получить всю информацию по договорам ... список подключать смысла нет. а потому нужен сохраненный жесткий запрос принимающий в качестве параметра строку из формы с перечислением номеров платежек (одна недолга ... номера платежек хранятся в текством формате) я уже все перепробовал ... ни хр@на не получатся ...может не в том направлении копаю? тада дайте валшебнага пенделя ... А ...

  Ответить  
 
 автор: snipe   (09.04.2012 в 06:21)   личное сообщение
18 Кб.
 
 

Вот один из вариантов
(поюзал функцию Йожыка)

  Ответить  
 
 автор: shanemac51   (09.04.2012 в 07:50)   личное сообщение
 
 

select * from tab1 
where instr("," & [param1] & ",","," & nplat & ",")>0

  Ответить  
 
 автор: Гоблин   (09.04.2012 в 18:56)   личное сообщение
 
 

Может я слабо въезжаю в то, что надо, но... Согласно примера снипа получается, что есть платежки и нужно только перечислить номера. Вот пользователь будет думать что там запятую, тире, многоточие....
Не проще ли поставить логическое поле, в котором он будет отмечать нужные, потом запрос по логическому полю "Да" или -1...
И после чего это поле обнуляется. Легче было бы сделать поле свободным. Отметил, прошел рекордсетом и выдал инфу, (открывается ленточная форма на этот запрос). По ее закрытии в форме все да изменились на нет. (или по нажатии кнопки запуска запроса все на нет)

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