Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Statheros
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
1

Не заполняется список

16.01.2020, 19:25. Просмотров 1110. Ответов 9
Метки нет (Все метки)

Имеется три списка. 1-ый с постоянным набором записей, он формирует 2-ой, а 2-ой 3-ий. Т.е. щелкаешь по записи первого списка, на основании его заполняется 2-ой, также и третий. Есть необходимость выбирать иногда все записи 2-го списка, чтобы они перешли в 3-ий. Для этого на форме разместил флажок "takeAll" со следующим кодом:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
If Not Me.list2.RowSource = "" Then
   If Me.takeAll = True Then
      Dim rst As DAO.Recordset, gg_new As String, mview As String
      Set rst = Me.list2.Recordset
    
      If Not (rst.EOF And rst.BOF) Then
         Dim a As String
         rst.MoveFirst
         Do Until rst.EOF
             mview = rst.Fields(1)
             gg_new = IIf(gg_new = "", mview, gg_new & ";" & mview)
             rst.MoveNext
         Loop
      End If
 
      Me.List3.RowSource = gg_new
      Me.List3.Requery
   
      rst.Close
      Set rst = Nothing
   Else
      Me.List3.RowSource = vbNullString
   End If
End If
Все работает. Но на случай ошибки, есть кнопка, которая очищает 2-ой и 3-ий списки.

Visual Basic
1
2
Me.List2.RowSource = vbNullString
Me.List3.RowSource = vbNullString
После этого не получается выбрать все записи. Ругается на рекордсет 2-го списка. При чем 2-ой список заполняется без проблем. Список есть, а Me.list2.Recordset пустой.

Где ошибся, подскажите.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2020, 19:25
Ответы с готовыми решениями:

Таблица заполняется на одних компьютерах и не заполняется на других
Всем доброго дня. Столкнулся с довольно странной проблемой. Довольно долго пользуюсь базой...

Почему не заполняется список?
void HashTable::insert(int student_number, std::string f_name, std::string m_name, std::string...

Не заполняется список в приложении
Здравствуйте! Помогите мне, пожалуйста, разобраться в чём ошибка. Задание: Создать форму, в...

Как заполняется список?
<!DOCTYPE html> <html lang="ru"> <head> <title>Пример функции и ее использования</title> ...

Статический список tempMessages для хранения сообщений заполняется мусором
Я пишут чат. Я использую статический список tempMessages для хранения сообщений в оперативной...

9
Eugene-LS
5304 / 2850 / 600
Регистрация: 05.10.2016
Сообщений: 7,991
16.01.2020, 21:36 2
Цитата Сообщение от Statheros Посмотреть сообщение
Ругается на рекордсет 2-го списка
Если я правильно понял:
вы (в не которых ситуациях) сначала делаете:
Visual Basic
1
Me.List2.RowSource = vbNullString
А потом:
Visual Basic
1
Set rst = Me.list2.Recordset
...
Естессено будет ошибка ...
...
У вас очень нестандартный подход к решению эой древней задачки - приятно видеть!

Добавлено через 7 минут
Statheros, "стандартно" это так в данном примере:
Каскадная фильтрация подчинённой формы по 3-м иерархически связанным полям со списком
0
Statheros
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
16.01.2020, 23:31  [ТС] 3
Eugene-LS, да именно так.

Добавлено через 38 минут
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Каскадная фильтрация подчинённой формы по 3-м иерархически связанным полям со списком
Хороший пример, жаль что раньше мне не попался. Однако там поля со списком, у меня же списки. Переделывать уже рука не поднимется.
0
Eugene-LS
5304 / 2850 / 600
Регистрация: 05.10.2016
Сообщений: 7,991
16.01.2020, 23:53 4
Цитата Сообщение от Statheros Посмотреть сообщение
у меня же списки.
Идея та же:
Переписываем свойство RecordSource "подчинённых" по выбранному значению в "старших", - сверху - вниз.
...
Думаю, что использование Recordset = лишнее, так как просто формируем SQL запросы источников сток для списков.
Попробуйте!
1
16.01.2020, 23:53
Statheros
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
17.01.2020, 18:45  [ТС] 5
Eugene-LS, переделал как Вы посоветовали. Теперь источник строк SQL запрос. Все работает во всех случаях. Спасибо!

Добавлено через 5 часов 37 минут
Новая проблема... Есть список, источник которого список значений, заполняемый программно. Для приведения его последовательности в порядок рядом со списком две кнопки со стрелками вверх и вниз.

Код одной из них:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  If Me.List.ListIndex = -1 Then Exit Sub
  If Me.List.ListIndex = Me.List.ListCount - 1 Then Exit Sub
  Dim Name1 As String, Name2 As String
  Dim pos1 As Integer, pos2 As Integer
  Dim ctlList As Control, varItem As Variant
 
  'извлекаем данные из выделенной строки
  Set ctlList = Me.List
  For Each varItem In ctlList.ItemsSelected
    Name1 = ctlList.Column(0) & ";" & ctlList.Column(1)
    pos1 = varItem
    pos2 = pos1 + 1
  Next varItem
  
  Me.List.Selected(pos1) = False
  Me.List.Selected(pos2) = True
  
  'находим данные из следующей строки
  For Each varItem In ctlList.ItemsSelected
    Name2 = ctlList.Column(0) & ";" & ctlList.Column(1)
  Next varItem
  
  'меняем местами данные
  Dim ms() As String
  ms = Split(Me.List.RowSource, ";", 2)
  ms(pos1) = Name2
 ms(pos2) = Name1
 
  Me.List.RowSource = Join(ms, ";")
На последнем этапе засада. Когда в списке всего две строки, они меняются местами нормально. Когда много, вылетает ошибка. Помогите советом, пожалуйста.
0
Eugene-LS
5304 / 2850 / 600
Регистрация: 05.10.2016
Сообщений: 7,991
17.01.2020, 22:48 6
Цитата Сообщение от Statheros Посмотреть сообщение
Когда в списке всего две строки, они меняются местами нормально. Когда много, вылетает ошибка.
Мне не совсем понятна ваша задачка.
А код написан ровно на две строки.
Какие операции должны выполнять эти две кнопки? В чём задача?
- Менять местами два выделения?
- Менять местами две строки?
- Перемещать выделенное по списку?
- Перемещать строку по списку?
...
0
Statheros
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
17.01.2020, 23:01  [ТС] 7
Перемещать строку по списку вверх или вниз
0
Eugene-LS
5304 / 2850 / 600
Регистрация: 05.10.2016
Сообщений: 7,991
18.01.2020, 02:03 8
Лучший ответ Сообщение было отмечено Statheros как решение

Решение

Цитата Сообщение от Statheros Посмотреть сообщение
Перемещать строку по списку вверх или вниз
Большое спасибо что ответили.
А можно ещё вопрос?
- мультивыделение в списке ON- OFF ?
И если ON - то зачем?

Добавлено через 2 часа 57 минут
Цитата Сообщение от Statheros Посмотреть сообщение
Перемещать строку по списку вверх или вниз

Вот тут
нашлось готовое решение для вас:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Private Sub ListResort(ctlList As Control, iDirection%)
'Изменение порядка (пересортировка) элементов в ListBox c фиксированным набором значений
'----------------------------------------------------------------
'Пример применения:
'    ListResort Me!lstTestList, -1 'Вверх
'    ListResort Me!lstTestList, 1  'Вниз
'----------------------------------------------------------------
Dim ArrList() As String
Dim sStartName As String, sEndName As String
Dim iPosStart As Integer, iPosEnd As Integer
Dim intRow%, sVal$, iListCount%, iColumnCount%, iColumn%
 
On Error GoTo ListResort_Err
   
'Проверочки:
    iListCount = ctlList.ListCount
    If ctlList.ListIndex = -1 Then Exit Sub
    If iDirection = -1 Then 'Вверх
        If ctlList.ListIndex = 0 Then Exit Sub 'начало списка
    Else 'Вниз
        If ctlList.ListIndex = ctlList.ListCount - 1 Then Exit Sub
    End If
    
'----------------------------------------------------------------
    ReDim ArrList(-1 To iListCount - 1)
    iColumnCount = ctlList.ColumnCount
 
'
    For intRow = 0 To iListCount - 1
        sVal = ""
        For iColumn = 1 To iColumnCount 'Cобираем строку одного элемента списка
            sVal = sVal & ";" & ctlList.Column(iColumn - 1, intRow)
        Next iColumn
        
        sVal = Mid(sVal, 2) 'Удаляем первое вхождение ";"
        ArrList(intRow) = sVal 'Значение в массив!
        
        If ctlList.Selected(intRow) Then 'Если элемент выделен
            iPosStart = ctlList.ListIndex
            sStartName = sVal
            iPosEnd = iPosStart + iDirection 'Индекс эл. назначения
            
            For iColumn = 1 To iColumnCount 'Cобираем строку одного итема
                sEndName = sEndName & ";" & ctlList.Column(iColumn - 1, iPosEnd)
            Next iColumn
            sEndName = Mid(sEndName, 2)   'Удаляем первое вхождение  ";"
        End If
    Next intRow
 
'Меняем местами данные
    ArrList(iPosStart) = sEndName
    ArrList(iPosEnd) = sStartName
    
'Меняем RowSource
    sVal = Join(ArrList, ";")
    sVal = Mid(sVal, 2) 'удаляем первое ";"
    'Debug.Print "RowSource = " & sVal
    ctlList.RowSource = sVal
 
ListResort_End:
    On Error Resume Next
    Exit Sub
 
ListResort_Err:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Sub ListResort.", _
        vbCritical, "Произошла ошибка!"
    'Debug.Print "ListResort_Line: " & Erl & "."
    Err.Clear
    Resume ListResort_End
 
End Sub
1
Statheros
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
18.01.2020, 14:52  [ТС] 9
Цитата Сообщение от Eugene-LS Посмотреть сообщение
А можно ещё вопрос?
- мультивыделение в списке ON- OFF ?
И если ON - то зачем?
В моем случае MultiSelect был отключен, но это теперь не важно. Ваш пример просто СУПЕР!!! То что я хотел.
0
Eugene-LS
5304 / 2850 / 600
Регистрация: 05.10.2016
Сообщений: 7,991
18.01.2020, 15:02 10
Цитата Сообщение от Statheros Посмотреть сообщение
Ваш пример просто СУПЕР!!!
Спасибо на добром слове.
Обратите внимание - он универсальный (не привязан к конкретному контролу и его настройкам).
0
18.01.2020, 15:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2020, 15:02

Ошибка при заполнении списка, весь список в цикле заполняется последними значениями
Доброго времени суток! Только недавно начала изучать питон, есть задача написать скрипт, который...

Не заполняется БД
Код ошибок не вызывает, полностью выполняется, но БД пустует. Ошибок в названиях нет. Никто не...

Не заполняется бд
Что не так с кодом, почему вводимые в поля значения не записываются в бд? <?php ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.