Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
добрый всем знатокам.

прошу подсказать в чем может быть проблема
есть форма, на ней есть combobox. Заполнен 12-ю значениями. При этом выбраны галочками в разных записях разное кол-во значений. В данном случае - языков.
Прописал цикл на событие AfterUpdate

Private Sub proсРасчетГрафКолво()
Dim varКолвоЯзыков As Integer, I As Long

For I = 0 To [cmbЯзыки].ListCount - 1
If [cmbЯзыки].Selected(I) = True Then
varКолвоЯзыков = varКолвоЯзыков + 1
End If
Next I

[fldКолвоЯзыков].Value = varКолвоЯзыков

End Sub


Работает как надо, после выбора галочками нужных языков и нажатия ОК на combobox, в зеленой графе указывается подсчитанное кол-во языков.
Требуется чтобы при смене записей обновлялось поле "Кол-во языков", т.к. его значение нигде не хранится, а просто выводится для информации. Прикручиваю тот же код на Form_Current - не работает. Смотрю по отладчику, строка [cmbЯзыки].Selected(I) на каждой записи цикла дает значение НОЛЬ, соответственно, в ячейке отображается общее кол-во НОЛЬ. В чем может быть проблема? как подправить чтобы работало на событии Form_Current.

Заранее спасибо за помощь
29 окт 18, 06:12    [21717587]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Serg197311
Member

Откуда:
Сообщений: 410
https://www.sql.ru/forum/1297696/problema-so-spiskom
Вроде как похоже? Мне по крайней мере помогло.
29 окт 18, 07:30    [21717603]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4255
Ганов Александр, я хоть и не работаю с такими вещами (многозначные поля), но думаю что нужно не выбранные Item, а работать с Field2 от Recordset2 новой DAO. Я бы получал объект из этого поля и проверял его содержимое.
29 окт 18, 07:40    [21717606]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4255
Подправлю...
Панург
Ганов Александр, я хоть и не работаю с такими вещами (многозначные поля), но думаю что нужно не выбранные Item считать, а работать с Field2 от Recordset2 новой DAO. Я бы получал объект из этого поля и проверял его содержимое.

и дополню

Объект представляет собой набор записей - Recordset
29 окт 18, 07:42    [21717607]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
Панург, принял. покурю в сторону Recordset, тем более, что у объекта есть такое свойство, стало быть им можно воспользоваться. Вроде бы из cmb.Selected все должно работать, а вот почему не работает при событии form_current - загадка, ответ на которую не очевиден :-)
29 окт 18, 08:36    [21717626]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
Serg197311, спасибо за ссылочку. изучу детально, попробую потестить.
29 окт 18, 08:37    [21717627]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
Панург, спасибо за наводку. не обратил внимание на индекс "2", честно говоря, не пользовался новым DAO. изучу доки по этому поводу.
29 окт 18, 08:40    [21717629]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4255
Ганов Александр
почему не работает при событии form_current - загадка, ответ на которую не очевиден
Я точно не знаю (т.к. говорил выше, не работаю с такими полями), но могу предположить, что как такового списка не существует (для оптимизации), пока его намеренно не вызовут. Но это ИМХО, не основанное ни на чём.
29 окт 18, 09:37    [21717674]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5889
Ганов Александр

Требуется чтобы при смене записей обновлялось поле "Кол-во языков", т.к. его значение нигде не хранится, а просто выводится для информации.
А с какого перепугу это поле должно иметь какое-то значение,"которое нигде не хранится"(значение присваивается позже-в обработке AfterUpdate, да и то в новой записи)
29 окт 18, 10:59    [21717754]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
sdku, ну все верно. задумка простая при смене записи цикл опрашивает значение поля [сmbЯзыки], которое хранится в таблице и имеет реальное значение, то есть при загрузке следующей/предыдущей записи система опрашивает поле [сmbЯзыки] и присваивает кол-во отмеченных элементов полю [fldКолвоЯзыков]. Понятно, что если в [сmbЯзыки] данных нет, то и [fldКолвоЯзыков] будет НОЛЬ. но дело в том, что оно НОЛЬ и в том случае когда данные имеются
Ради интереса перевесил на AfterUpdate формы, эффект тот же, кол-во НОЛЬ, хотя если я выберу я открою комбо и нажму ОК, т.к. записи там уже выбраны. То покажет кол-во записей, то события формы никак не обрабатывают свойство Selected, даже если данные имеются

Private Sub Form_AfterUpdate()
Call proсРасчетГрафКолво
End Sub

К сообщению приложен файл. Размер - 16Kb
29 окт 18, 11:10    [21717764]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5889
вдогонку:посчитайте на событии current,если запись не новая,количество разделителей в поле[языки]+1 и присвойте это значение Вашему полю
29 окт 18, 11:11    [21717768]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Serg197311
Member

Откуда:
Сообщений: 410
еще вариант - расшифровка того топика что я присылал(оригинал от Панурга) - на клик мыши по полю вычисляем строку на которую кликнули(через координаты курсора), меняем в этой строке значение чекбокса, пересчитываем пол Количество языков.
29 окт 18, 11:22    [21717782]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5889
Ганов Александр

Private Sub proсРасчетГрафКолво()
Dim varКолвоЯзыков As Integer, I As Long

For I = 0 To [cmbЯзыки].ListCount - 1
If [cmbЯзыки].Selected(I) = True Then
varКолвоЯзыков = varКолвоЯзыков + 1
End If
Next I
[fldКолвоЯзыков].Value = varКолвоЯзыков
End Sub

Из HELP:Selected-Возвращает массив логических значений для обрабатываемого списка, содержащий состояние его элементов (выбран/не выбран)
Стесняюсь спросить:а что у Вас выбрано при переходе на новую запись?
29 окт 18, 11:40    [21717805]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
sdku, help я внимательно прочитал. в том то и дело. что выбран в данном случае означается отмечен галочками, при переходе на новую запись в списке также будут отмечены галочками те записи, которые были ранее отмечены и информация по которым сохранена в таблице. Получается что combobox трактует "выбран" только в том случае если элементом combo получен фокус, то есть даже если галочки по факту стоят, свойство SELECTED обозначает не отмеченные элементы, а выбранные по аналогии с объектом ListBox.
То есть как бы те, на которых в данных момент стоит фокус (грубо говоря, которые с CTRL или SHIFT) выбраны мышью в списке.
Получается, что банально данное свойство в такой интерпретации как я хотел использовать нельзя
29 окт 18, 13:15    [21717925]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
sdku, логично, хороший вариант, без всяких проблем, найти все ";" и плюс +1 элемент
29 окт 18, 13:16    [21717926]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
Serg197311, спасибо. интересный вариант. надо поэкспериментировать, не пробовал такой подход
29 окт 18, 13:18    [21717928]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5889
Ганов Александр
при переходе на новую запись в списке также будут отмечены галочками те записи, которые были ранее отмечены
С какого перепугу? Мало того что не отмечены,а даже списка не увидите
29 окт 18, 13:46    [21717955]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
sdku, будут отмечены 100% и список будет виден, т.к. прописаны в источнике combobox

К сообщению приложен файл. Размер - 47Kb
29 окт 18, 14:10    [21717986]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
Private Sub proсРасчетГрафКолво()
Dim varКолвоЯзыков As Integer, I As Long, varЯзык As String
     
For I = 0 To [cmbЯзыки].ListCount - 1
     On Error GoTo mark
     varЯзык = [cmbЯзыки].Value(I)
     varКолвоЯзыков = varКолвоЯзыков + 1
Next I

mark:
[fldКолвоЯзыков].Value = varКолвоЯзыков

End Sub


вот таким "не очень" способом тоже работает :-) как только доходит до Value, которого нет, то выдает ошибку, на это цикл и заканчивается.
29 окт 18, 14:16    [21717994]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
но это какое-то неправильное решение. делать-то будет что надо :-), но как-то через "одно место"
29 окт 18, 14:25    [21718012]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5142
Ганов Александр, а можно пример базы с этим всем - таблица, форма и так далее? Мне, например, ни чего непонятно ;)
29 окт 18, 14:45    [21718042]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
sdku, оказалось все еще проще. Value возвращает массив с данными каждой выделенной строки, таким образом вот так все работает

Private Sub proсРасчетГрафКолво()

On Error Resume Next
If UBound([cmbЯзыки].Value) > 0 Then [fldКолвоЯзыков].Value = UBound([cmbЯзыки].Value) + 1

End Sub
29 окт 18, 14:59    [21718060]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 173
то есть все, что отмечено в combobox с множественными значениями (когда можно выбрать несколько значений как на скрине выше), сохраняется в таблице данных просто через точку с запятой язык1;язык2 и т.д. А при обращении к свойству Value выдает массив с несколькими строками, каждая из которых содержит значение, которые разделены в источнике данных (в таблице) точкой с запятой. Обратиться к каждой строке можно через ее индекс Value(index)
29 окт 18, 15:04    [21718068]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5889
Ганов Александр,
не через "одно место":
Private Sub Form_Current()
Dim retval
If Not Me.NewRecord and Not IsNull(Me.языки) Then
         retval= Split(Me.языки, ";")
              Me.Ваше поле= UBound(retval)+1
End If
End Sub
29 окт 18, 15:07    [21718077]     Ответить | Цитировать Сообщить модератору
 Re: подсчет выбранных в ComboBox  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5889
Все правильно-опоздал-когда писал сообщение Ваше еще не видел (обновилось после публикации)
29 окт 18, 15:09    [21718080]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить