powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как передать из списка в форме в запрос несколько значений этого списка(+)?
25 сообщений из 31, страница 1 из 2
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32310412
Spate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как передать из списка в форме в запрос несколько значений этого списка для того , что бы отфильтровать в запросе данные, по результату выделения в форме.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32310464
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такими делами удобнее заняться с таблицей:

делаешь в ней поле с галкой
ставишь галку для нужных

объединяешь эту таблицу с таблицей данный
в запросе и ставишь фильтр: брать тока те, где стоит галка.

ВСЕ!
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32310491
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверить св-во .Selected (см. справку). Накидать идентификаторы записей в авоську (строку " IN(x,x,x,x,x,)") и прицепить ее к строке WHERE запроса
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32310504
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То assa :
Хоть этот пост и не я открыл, но мне тоже это надо будет делать и вот тоже ломал голову как. Ты подкинул мне светлую(???) мыслишку. :)) Пасибочки.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32310901
Spate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Расшифруйте, пожалуйста, 399963 сообщение.Я не знаю как найти это свойство, и по справке никак не докопаюсь.:-(
Это свойство у моего списка?
запрос в режиме SQL выгладит так:

SELECT ShopManagerSpecialize.CodeTMSpecialize, TradeMark.TradeMarkR
FROM TradeMark INNER JOIN ((ShopInfo INNER JOIN ShopManager ON ShopInfo.CodeSI = ShopManager.CodeSI) INNER JOIN ShopManagerSpecialize ON ShopManager.CodeShM = ShopManagerSpecialize.CodeShM) ON TradeMark.CodeTM = ShopManagerSpecialize.CodeTMSpecialize
WHERE (((ShopManagerSpecialize.CodeTMSpecialize) Like [Forms]![formaFIOsellerALL]![choiceTM]));

запрос открывается отчетом.Отчет открывается формой, в которой есть только этот список : (поле choiceTM).

Private Sub ChoiceTM_AfterUpdate()
On Error GoTo Err_ChoiceTM_AfterUpdate

Dim stDocName As String

stDocName = "reportFIOsellerALL"
DoCmd.OpenReport stDocName, acPreview

Exit_ChoiceTM_AfterUpdate:
Exit Sub

Err_ChoiceTM_AfterUpdate:
'MsgBox Err.Description
Resume Exit_ChoiceTM_AfterUpdate
End Sub

Когда я вместо списка делал поле со списком, и соотвественно его подставлял в в запрос, то результат выдавался, но только для одного выбранного значения, а мне к несчастью, нужно чтобы отчет выдавал результат нескольких значений списка choiceTM.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32310928
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не связанное выделение уже научили делать, как я понял?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim lb As ListBox
Set lb = Me.[мой лист бокс]
For i =  0  To lb.ListCount -  1 
      If lb.Selected(i) Then
         ' (lb.Column(0, i) - это для примера, если у листа присоединённый столбец 0
         ' делаем что угодно, т.е. собираем в строку строчку Where
      End If
Next


Ну примерно так.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32311467
Spate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как это сделать- собрать строку в where?
у листбокса имя ChoiceTM.
Куда вставлять Ваш код?
я так понимаю, что вот в этом месте что то должно поменяться?
WHERE (((ShopManagerSpecialize.CodeTMSpecialize) Like [Forms]![formaFIOsellerALL]![choiceTM]));
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32311528
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под кнопку на форме с листбоксом вставляем код.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim lb As ListBox
Dim strWhere As String
Dim strCriteria As String
Dim i As Long
If lb.ItemsSelected.count <>  0  Then
    Set lb = Me.[мой лист бокс]
    strCriteria =  "ShopManagerSpecialize.CodeTMSpecialize Like '" '
    strWhere = strCriteria
    For i = 0  To lb.ListCount -  1 
        If lb.Selected(i) Then
            If strWhere = strCriteria Then
                strWhere = strWhere & lb.Column( 0 , i) & "'"
            Else
                strWhere = strWhere & " OR " & strCriteria & lb.Column(0, i) & "'"
            End If
        End If
    Next
    MsgBox strWhere
End If
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32311533
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше использовать цикл
dim var as Variant
For each var in list.ItemsSelected
вместо For i = 0 To lb.ListCount - 1
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32311536
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Ну да, так быстрее будет:)
Не додумал немного, просто писалось быстро и на примерном листе (небольшом).
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32311540
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В коде ошибка есть - присвоение lb нужно делать раньше первого IF:)

Ghjcnj Ша добавил потом не подумавши:)
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32311587
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, Like + OR оно конечно хорошо, но рыхло (все таки есть ограничение на длину SQL инструкции). In(,,,,,) значительно компактнее. Я для сбора строк использую че -нить наподобие:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function ConCat (x, y, sep As String)
    If Trim(x &  "") = "  " Then
        ConCat = y & "  "
        Exit Function
    End If
    ConCat = x
    If Trim(y & "  ") <> " " Then
        ConCat = x & sep & y
    End If
End Function

И вызываю ее под разными соусами (sep ="," | " OR " | " AND ") для сшивок strWhere. Пополнив джентельменский набор ф-ей наподобие:
Код: plaintext
1.
2.
3.
4.
5.
6.
Function ConPreSuf (pref As String, x, suf As String) As String
    If Trim(x &  "") = "  " Then
        ConPreSuf = " "
        Exit Function
    End If
    ConPreSuf = pref & x & suf
End Function

можно покрыть большую часть потребностей по динамическому сбору SQL строк.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32312518
Spate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за участие в этой проблеме!
И помогите сделать наверное последниый шаг %-\

сейчас у меня на кнопке, в форме которая вызывает отчет,благодаря вам, висит вот этот код:

Private Sub Кнопка9_Click()
Dim lb As ListBox
Dim strWhere As String
Dim strCriteria As String
Dim stDocName As String
Dim i As Long

Set lb = Me.[ChoiceTM]
If lb.ItemsSelected.Count <> 0 Then

strCriteria = "ShopManagerSpecialize.CodeTMSpecialize Like '" '
strWhere = strCriteria
For i = 0 To lb.ListCount - 1
If lb.Selected(i) Then
If strWhere = strCriteria Then
strWhere = strWhere & lb.Column(0, i) & "'"
Else
strWhere = strWhere & " OR " & strCriteria & lb.Column(0, i) & "'"
End If
End If
Next
MsgBox strWhere


End If
On Error GoTo Err_ChoiceTM_L
stDocName = "reportFIOsellerALL"
DoCmd.OpenReport stDocName, acPreview

Exit_ChoiceTM_L:
Exit Sub

Err_ChoiceTM_L:
MsgBox Err.Description
Resume Exit_ChoiceTM_L
End Sub

Отчет использует запрос, который я собрал в конструкторе, и чтобы его здесь показать, я его представил в виде SQL.

SELECT ShopManagerSpecialize.CodeTMSpecialize, TradeMark.TradeMarkR
FROM TradeMark INNER JOIN ((ShopInfo INNER JOIN ShopManager ON ShopInfo.CodeSI = ShopManager.CodeSI) INNER JOIN ShopManagerSpecialize ON ShopManager.CodeShM = ShopManagerSpecialize.CodeShM) ON TradeMark.CodeTM = ShopManagerSpecialize.CodeTMSpecialize
WHERE (((ShopManagerSpecialize.CodeTMSpecialize) Like '6' Or (ShopManagerSpecialize.CodeTMSpecialize) Like '16'));

в данном примере я подставил просто два числа 6 и 16 чтобы мне самому было понятнее как пишется условие отбора. Но вопрос вот в чем: я уже пробовал подставлять так:

SELECT ShopManagerSpecialize.CodeTMSpecialize, TradeMark.TradeMarkR
FROM TradeMark INNER JOIN ((ShopInfo INNER JOIN ShopManager ON ShopInfo.CodeSI = ShopManager.CodeSI) INNER JOIN ShopManagerSpecialize ON ShopManager.CodeShM = ShopManagerSpecialize.CodeShM) ON TradeMark.CodeTM = ShopManagerSpecialize.CodeTMSpecialize
WHERE ('strWhere');
с вариантами скобок, ковычек :-(, но похоже, что при таком подходе, данные не подставляются, а в WHERE используетсся просто само слово strWhere, а не то что эта переменная должна нести в себе.

вот что собирается при выборе двух значений из списка "ShopManagerSpecialize.CodeTMSpecialize Like '6' OR ShopManagerSpecialize.CodeTMSpecialize Like '16'" после нажатия кнопки в форме, но еще раз повторюсь, похоже что эта строка в запрос не передается.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32312559
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если в запрос вставлено имя переменной, то оно там не распознается. Надо вставить значение переменной. То есть:

strSelect = ... & strWhere

таким образом, чтобы значение strWhere стало частью значения strSelect.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32314140
Spate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
напишите пожалуйста что куда поставить исходя из моего примера- никак не соображу сам :-((
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32314154
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В этом примере составляется некий стринг:

strWhere = strWhere & ...

Точно таким же образом надо этот стринг запихать в селект. Не имя его, а сам стринг.

strSelect = ... & strWhere
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32315498
Spate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошу прощения за то, что торможу, но вот куда конкретно вписать ваш пример в моем запросе???:

В этом примере составляется некий стринг:

strWhere = strWhere & ...

Точно таким же образом надо этот стринг запихать в селект. Не имя его, а сам стринг.

strSelect = ... & strWhere

SELECT ShopManagerSpecialize.CodeTMSpecialize, TradeMark.TradeMarkR
FROM TradeMark INNER JOIN ((ShopInfo INNER JOIN ShopManager ON ShopInfo.CodeSI = ShopManager.CodeSI) INNER JOIN ShopManagerSpecialize ON ShopManager.CodeShM = ShopManagerSpecialize.CodeShM) ON TradeMark.CodeTM = ShopManagerSpecialize.CodeTMSpecialize
WHERE ('strWhere');
с вариантами скобок, ковычек :-(, но похоже, что при таком подходе, данные не подставляются, а в WHERE используетсся просто само слово strWhere, а не то что эта переменная должна нести в себе.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32316260
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> но похоже, что при таком подходе, данные не подставляются, а в WHERE используетсся просто само слово strWhere, а не то что эта переменная должна нести в себе.

Вот именно это и надо исправить.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32317143
Spate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но вот именно что как и где я и не могу дотумкать :-(((
Пожалуйста, впешите в пример моего запроса правильную строку подстановки фильтра выбранного из списка.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32317155
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А как выглядит программа, которая запихивает буквы "strWhere" в стринг?
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32317182
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВС
В сообщении выше представлен текст программы.

2 Spate
Код: plaintext
1.
DoCmd.OpenReport  "MyReport" , acViewPreview, , strWhere


В источнике данных репорта ставишь запрос без Where. Должно работать.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32317197
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Hummer писал:В сообщении выше представлен текст программы.
В котором? Я прошу программу, которая запихивает буквы "strWhere" в стринг. Выше я вижу только сам стринг, полученный при помощи какой-то программы, и вижу программу, которая сочиняет strWhere, который нигде не используется.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32317269
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч
Не будем разводить демагогию.
Если прочитать всю ветку, то становится ясно, что автор ветки привёл текст запроса с неправильной вставкой переменной в запрос, вот и всё, Вы сами это поняли (strSelect = ... & strWhere (Ваше сообщение 404775)), автор этого не понял и не понял, что нужно сделать, чтобы всё заработало.
Он в конструкторе в запрос вставляет в условие Where переменную, потом смотрит текст запроса и получает имя переменной в кавычках.
Это следут из поста автора за номером 402641.
("Отчет использует запрос, который я собрал в конструкторе, и чтобы его здесь показать, я его представил в виде SQL").
Итоговая строка запроса в коде нигде не формируется, как это следует из того же поста.

2 Spate
Нужно объявить строковую переменную (strSelect) и сделать то, что предложил Владимир Саныч (strSelect = ... & strWhere, где вместо многоточия текст запроса с последней командой WHERE), далее открыть отчёт и в качестве его источника данных использовать эту переменную. Передать можно значение через OpenArgs или открыть в скрытом режиме и присвоить источник данных в том же блоке кода, где формируется Where.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32317305
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Не будем разводить демагогию.

Без демагогии я уже дважды сказал автору вопроса, что надо делать. Если он не понимает, то пусть покажет свою программу. Вставляет ли он в конструкторе, я не знаю, но догадка интересная.
...
Рейтинг: 0 / 0
как передать из списка в форме в запрос несколько значений этого списка(+)?
    #32317338
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
Не понимает, но программу показал уже всю. как мне кажется:)
Или я уже тоже ничего не понимаю:)

см. 402641 >сейчас у меня на кнопке, в форме которая вызывает отчет,благодаря вам, висит вот этот код:

и далее по тексту...
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как передать из списка в форме в запрос несколько значений этого списка(+)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]