Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86

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

16.01.2020, 19:25. Показов 1787. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2020, 19:25
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 38 минут
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Каскадная фильтрация подчинённой формы по 3-м иерархически связанным полям со списком
Хороший пример, жаль что раньше мне не попался. Однако там поля со списком, у меня же списки. Переделывать уже рука не поднимется.
0
Эксперт MS Access
 Аватар для Eugene-LS
12066 / 5849 / 1494
Регистрация: 05.10.2016
Сообщений: 16,436
16.01.2020, 23:53
Цитата Сообщение от Statheros Посмотреть сообщение
у меня же списки.
Идея та же:
Переписываем свойство RecordSource "подчинённых" по выбранному значению в "старших", - сверху - вниз.
...
Думаю, что использование Recordset = лишнее, так как просто формируем SQL запросы источников сток для списков.
Попробуйте!
1
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
17.01.2020, 18:45  [ТС]
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
Эксперт MS Access
 Аватар для Eugene-LS
12066 / 5849 / 1494
Регистрация: 05.10.2016
Сообщений: 16,436
17.01.2020, 22:48
Цитата Сообщение от Statheros Посмотреть сообщение
Когда в списке всего две строки, они меняются местами нормально. Когда много, вылетает ошибка.
Мне не совсем понятна ваша задачка.
А код написан ровно на две строки.
Какие операции должны выполнять эти две кнопки? В чём задача?
- Менять местами два выделения?
- Менять местами две строки?
- Перемещать выделенное по списку?
- Перемещать строку по списку?
...
0
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
17.01.2020, 23:01  [ТС]
Перемещать строку по списку вверх или вниз
0
Эксперт MS Access
 Аватар для Eugene-LS
12066 / 5849 / 1494
Регистрация: 05.10.2016
Сообщений: 16,436
18.01.2020, 02:03
Лучший ответ Сообщение было отмечено 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
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86
18.01.2020, 14:52  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
А можно ещё вопрос?
- мультивыделение в списке ON- OFF ?
И если ON - то зачем?
В моем случае MultiSelect был отключен, но это теперь не важно. Ваш пример просто СУПЕР!!! То что я хотел.
0
Эксперт MS Access
 Аватар для Eugene-LS
12066 / 5849 / 1494
Регистрация: 05.10.2016
Сообщений: 16,436
18.01.2020, 15:02
Цитата Сообщение от Statheros Посмотреть сообщение
Ваш пример просто СУПЕР!!!
Спасибо на добром слове.
Обратите внимание - он универсальный (не привязан к конкретному контролу и его настройкам).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2020, 15:02
Помогаю со студенческими работами здесь

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

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

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

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

Не заполняется бд
Что не так с кодом, почему вводимые в поля значения не записываются в бд? <?php ini_set('display_errors', 0); ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru