0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 9
|
||||||||||||||||
Заполнение ListBox значениями из БД Access25.04.2018, 00:23. Показов 7489. Ответов 12
Метки нет Все метки)
(
Добрый день!
Имеется такая задача: на форме размещен ComboBox и ListBox. Также имеется БД одной таблицей и с полями:
С первой частью я справился:
На всякий случай: во втором фрагменте кода все, что после
0
|
25.04.2018, 00:23 | |
Ответы с готовыми решениями:
12
Заполнение ListBox из поля БД Access
ListBox ActiveX с уникальными значениями |
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 9
|
|||||||||||
25.04.2018, 09:12 [ТС] | |||||||||||
Хм, правильно ли я понял, что Вы предлагаете во фрагменте Private Sub Form1_Load заменить
0
|
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 9
|
|
25.04.2018, 16:47 [ТС] | |
И потом этот столбец запихать в ListBox по аналогии с ComboBox? Попробую )
Добавлено через 7 часов 24 минуты Вопрос: нужно ли заранее объявлять FamImya как переменную? Спрашиваю, т.к. Visual Studio ругается на использование FamImya в качестве источника данных - переменная не объявлена
0
|
1651 / 1091 / 158
Регистрация: 25.07.2015
Сообщений: 2,264
|
||||||
25.04.2018, 19:14 | ||||||
FamImya -это не переменная, это псевдоним (Alias) .
Запрос должен выглядеть как-то так
которого нет как источника.
0
|
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 9
|
|||||||||||
25.04.2018, 21:48 [ТС] | |||||||||||
Спасибо, теперь Студия не ругается )
Однако нужный результат получить не удалось - в ListBox так ничего и не передается =( Сам код с обновленным запросом выглядит теперь так:
Добавлено через 14 минут Похоже, что часть проблемы крылась в запросе к БД - функцию Quote нужно исправить вот так:
0
|
1651 / 1091 / 158
Регистрация: 25.07.2015
Сообщений: 2,264
|
||||||
25.04.2018, 22:16 | ||||||
У меня несколько вопросов :
1) Зачем вам функция Quote ? Она , исходя из представленного кода , никакого дополнительного функционала не несёт , ничего не возвращает , а только усложняет читабельность кода и подхомячивает ресурсы. Вы просто из одной строковой переменной перегоняете данные в другую..зачем ? 2) Вы уверены , что запрос в Private Sub ComboBox1_SelectedIndexChanged что-то возвращает ? По идее должно быть так в условии WHERE
0
|
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 9
|
|
25.04.2018, 22:26 [ТС] | |
1. Функция Quote - на мой взгляд с ней наоборот проще читать код было =)
2. Т.к. опыта у меня практически нет, то не могу сказать, что я сильно уверен =) Но мне казалось, что Private Sub ComboBox1_SelectedIndexChanged срабатывает в тот момент, когда пользователь выбирает какое-то значение в Combobox На счет условия WHERE - да, я тоже заметил, что у меня скобок не хватает, но с ними тоже ничего не выводится ) 3. БД приложил
0
|
1651 / 1091 / 158
Регистрация: 25.07.2015
Сообщений: 2,264
|
|||||||||||
26.04.2018, 08:13 | |||||||||||
kelevara, как и предполагалось запрос в "Private Sub ComboBox1_SelectedIndexChanged "
ничего не возвращал , перемудрили вы с функцией. И ещё : DT , созданный на основе запроса возвращает пустую строку по индексу 0
И мой вам совет - чем проще , тем лучше и надёжнее . Не стоит понаверчивать лишний код - вероятность ошибок увеличивается. В частности ваша функция возвращает выбранный год , но с лишними пробелами. Почему это происходит понятия не имею , а разбираться - время терять , проще написать напрямую . Ниже рабочий код - пользуйтесь, разбирайтесь. Удачи.
Затупил ![]()
1
|
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 9
|
|
26.04.2018, 16:45 [ТС] | |
Kulma, Спасибо большое, все получилось =)
Сам код вроде бы понятен, за исключением нескольких моментов: 1. почему нужно ссылаться на индекс 1 для переменной r в цикле обхода DT? Ведь во фрагменте кода для combobox я ссылался на 0-ой индекс и он был не пуст? 2. если бы в базе данных столбец с годами имел бы тип не "Короткий текст", а например "Число", то что нужно изменить в запросе (попробовал запустить такой запрос, изменив тип данных в столбце - получил ошибку Студии "Несоответствие типов данных в выражении условия отбора" на выражении dBaseCommand.ExecuteNonQuery())? Правильно я понимаю, что проблема в том, что ComboBox1.SelectedItem.ToString имеет тип "Строка", а в БД я ее пытаюсь сравнивать с "числом"?
0
|
1651 / 1091 / 158
Регистрация: 25.07.2015
Сообщений: 2,264
|
||||||
26.04.2018, 19:30 | ||||||
Всё правильно понимаете .
Вам нужно определиться , какие данные будете сравнивать (числа или строки) и от этого будет зависеть транскрипция написания условия отбора. Индекс 1 -это индекс столбца в строке r. Вообще это тема целой лекции )) Если коротко , то во фрагменте кода для combobox вы ЯВНО выбираете все значения из таблицы и ими заполняете DataTable (DT) "SELECT DISTINCT [Год рождения] ....." Соответственно столбец с 0 индексом заполнен значениями ( в вашем случае годом рождения ) и виден для отображения . При запросах же с фильтром сначала выполняется фильтр WHERE , а потом уже выполняется выборка SELECT , согласно результатам фильтра. Если поле, участвующее в фильтре (как у вас), в SELECT ЯВНО не участвует , то это не значит , что его нет в выборке , оно просто не видимо . Соответственно оно есть и в DT , просто не видимо (это легко увидеть в отладчике). В вашем случае НЕЯВНОЕ поле [Год рождения], участвующее в фильтре WHERE занимает в DT столбец с индексом 0 , т.е. r(0), но для внешней обработки /выборки/визуализации оно не доступно , оно зарезервировано для внутреннего использования. Поэтому обращаясь к нему вы всегда будете получать пустое результирующее значение. Если же вы его выберите ЯВНО в SELECT , т.е. ваш запрос будет выглядеть
Прошу прощения за столь корявые разъяснения ))) Настоятельно рекомендую , если планируете заниматься БД , почитать по языку T-SQL....
1
|
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 9
|
|
26.04.2018, 21:24 [ТС] | |
Kulma, блин, все бы так "коряво" объясняли =) спасибо за помощь! )
0
|
26.04.2018, 21:24 | ||||||
Помогаю со студенческими работами здесь
13
Заполнить Listbox значениями с листа
Заполнение массива значениями Заполнение матрицы значениями Заполнение структуры значениями Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|