powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB.net и сложные таблицы
25 сообщений из 34, страница 1 из 2
VB.net и сложные таблицы
    #36629531
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа программисты!
такой вопросик
есть таблица вида:

колонка1| колонка2 | колонка3 | колонка4 |
--------------------------------------------
NULL |NULL | 1 |2 |
--------------------------------------------
Работа1 | Подработа1 | рез1 | рез2 |
--------------------------------------------
NULL | Подработа2 | рез3 | рез4 |
--------------------------------------------
NULL | Подработа3 | рез5 | рез6 |
--------------------------------------------
Работа2 | Подработа1 | рез7 | рез8 |
--------------------------------------------
NULL | Подработа2 | рез9 | рез10 |
--------------------------------------------
Работа3 | Подработа1 | рез11 | рез12 |
--------------------------------------------

задача такая:
на форме должны быть 3 listboxa
listbox1 - содержит [колонка1]
listbox2 - содержит [колонка2] в зависимости от выбранного значения [колонка1] в listboxe1
listbox3 - содержит значения первой строки [колонка3] и [колонка4]
После выбора пользователя listbox1, listbox2, listbox3 надо получить значение "резN"
Как это сделать используя массивы или БД(SQL server local)?
Структура [колонка1] и [колонка2] заранее не известна(т.е. сколько значений [колонка2] входит в [колонка1])
Желательно исходную таблицу не нормировать(нормализовать).
Для решения, как вариант "бис" можно использовать дерево. Но лучше листбоксами.
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629593
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySenseVB.net и сложные таблицы

VB.net тут
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629648
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может вернемся к обсуждению?
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629652
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант можно сделать скрытое TreeView на форме разок разобрать данные, забить в listbox1 всех родителей из получившегося TreeView, а остальные listbox-ы вырубить .Enable = False, по мере выбора .Enable подчинённого listbox-а ставить в True и забивать из TreeView в зависимости от уровня. Так же не забыть изменять данные в зависимости от изменения данных. По умолчанию в подчинённом listbox-е выставлять отсутствие выбора.
PS: TreeView можно заменить на собственное написанное дерево
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629728
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySenseМожет вернемся к обсуждению?

тогда во-первых вот так:
колонка1 колонка2 колонка3 колонка4NULL NULL 1 2Работа1 Подработа1 рез1 рез2NULL Подработа2 рез3 рез4NULL Подработа3 рез5 рез6Работа2 Подработа1 рез7 рез8NULL Подработа2 рез9 рез10Работа3 Подработа1 рез11 рез12

Во-вторых я долго втыкал, но никак не смок воткнуть во фразу:
FuzzySenselistbox2 - содержит [колонка2] в зависимости от выбранного значения [колонка1] в listboxe1


Что именно должно находиться в listbox2, когда в listboxe1 выбрана, скажем, 5-я или 6-я строка. Приведите пример.
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629744
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, кажется дошло, вы таким неимоверным образом попытались создать в таблице структуру подчинения.

100% нужна нормализация. Причем это на порядки облегчит не только эту задачу, но и все остальные задачи обработки этой таблицы.
Причем из нормализованных таблиц с помощью представления можно запросто слепить то, что есть сейчас, а вот наоборот - никак!
Поэтому подумайте. Допустим у вас есть код для обработки таблицы в таком виде. Сделайте нормализацию под другими именами таблиц, а для этой создайте представление с бывшим именем таблице и ничего из старого кода переделывать не придется.

Если же нормализация невозможна, тогда:
У вам не хватает исходных данных. Из чего следует, что "Подработа3" подчиняется "Работе1"? Не из чего. Только не говорите мне, что из позиции в таблицы. В SQL нет понятия позиции, данные хранятся там как билл гейтс на душу положит, и никакой гарантии, что они всегда будут выводиться в одном и том же порядке нет. Скорее всего вы либо используете ID и сортируете по нему, либо есть нечто, определяющее порядок или подчиненность. Но этого вы в ТЗ не приводите.

Если скорректируете ТЗ - можно подумать, как решить это с помощью SQL. Но при отсутствии структуры подчиненности (то есть только сортировочный ИД) без курсора мы не обойдемся.

Либо можно действительно загрузить эту таблицу в массив в памяти и обрабатывать из массива. Это, конечно, самый дурацкий путь (полагаю, что реальная таблица состоит у вас из гораздо большего количества записей, чем вы привели), но можно и так. Причем опять же можно создать в памяти нормализованный набор массивов (а может лучше коллекций). То есть под Колонку1 завести отдельный массив, под Колонку2 - другой массив, прописав в него ссылки на 1-й массив для каждого элемента. Ну во второй массив можно загнать и Колонки 3 и 4, сделав его двумерным. Что вызывает сложности?
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629751
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНо при отсутствии структуры подчиненности (то есть только сортировочный ИД) без курсора мы не обойдемся.

Хотя нет, обойдемся.
1) выбираем ID, соответствующий выбранной позиции listbox1
2) выбираем с помощью TOP 1 ID следующей позиции из первой колонки
3) Выбираем данные из второй колонки для listbox2 между п.1 (включительно) и п.2 (не включительно) Учитываем возможный NULL в п.2
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629798
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Я думал про подчиненности, но плодить таблички, как то "некрасиво".
Продумывал различные комбинации вида матрицы, но как видно трудно получить зависимости
Подработ от Работы (комбинация подработ может меняться)
я так понимаю проще состряпать несколько массивов с названием работ включить в нее конкретные подработы, и так для каждого вида работы. Но очень уж нудно.
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629800
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

В общем как ни крути надо плодить таблички....
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629805
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну можно, конечно прописать подчиненность второго столбца первому прямо в этой же таблице. Или превратить ее в такой вид:
колонка1 колонка2 колонка3 колонка4NULL NULL 1 2Работа1 Подработа1 рез1 рез2Работа1 Подработа2 рез3 рез4Работа1 Подработа3 рез5 рез6Работа2 Подработа1 рез7 рез8Работа2 Подработа2 рез9 рез10Работа3 Подработа1 рез11 рез12
это будет чуть правильней, чем предыдущая.
Первую строку исключил нарочно, ибо ни к селу, ни к городу. Потому что нефиксированное количество подуровней не организовывают с помощью нефиксированного набора столбцов (разворачивают в строки), а фиксированное - и так заранее известно, зачем засорять таблицу посторонними данными.

У вас какой-то экселевский подход к этой таблице. БД так не проектируют
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629807
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПервую строку исключил нарочно, ибо ни к селу, ни к городу

ой, в итоге не исключил в примере, но ей там не место
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629809
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySenseЯ думал про подчиненности, но плодить таблички, как то "некрасиво".

Некрасиво то, что привели вы. Красиво - это реляционный подход к реализации в реляционных СУБД. Недаром про нормализацию написано на первых страницах всех учебников.
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629838
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Надо было сразу предупредить что в запросах я слабоват.
Так вот если табличку нормализовать как у вас то как листбокс загнать только одно значение из 1 ой колонки?
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629841
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT колонка1 FROM YourTable GROUP BY колонка1 ORDER BY колонка1
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629845
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Да, подход экселевский, т.к. изначально планировал данные таскать из xls. Но поразмыслив о защищенности такой "БД", решил выбрать из двух подходов - массив и БД с SQL.

По поводу первой строки, из колонки3 и колонки4 первой строки, будет заполняться листбокс3
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629847
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

я имел ввиду, чтоб значения в листбоксе не повторялись :)
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629853
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySenseПо поводу первой строки, из колонки3 и колонки4 первой строки, будет заполняться листбокс3

Не надо проектировать глупости!!!!!!!
Если вам надо заполнять листбокс из базы, заведите для этого отдельную таблицу.

FuzzySenseя имел ввиду, чтоб значения в листбоксе не повторялись :)

Я дал запрос, где значения не повторяются.
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629857
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

т.е. получается такая структура:
табл1 содержит колонка1
табл2 содержит колонка2, 3, 4
табл3 содержит строку из колонок 3 и 4

остается только связи по ключам организовать?
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629861
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если уж решились нормализовать и сделать совсе по уму - то вот так должно быть.

В таблицу "ТипыРезультатов" в "Код" вы заносите две записи - 1 и 2. Это соответствует двум столбцам результатов.

В таблицу "Результаты" вы заносите все результаты из колонки 3 и 4, причем сплошняком (то есть не разбивая на две колонки). А ссылку на колонку дополнительно указываете в столбце "ТипРезультата".

Таким образом у вас получается удобная и масштабируемая система, где количество колонок с результатами не ограничено двумя.
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629863
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скрипт
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629955
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySense,

Опиши свою задачу, по тому что без знания что нужно в конечном счёте получить нормальную нормализацию не сделать. Я бы предложил таблицы "Работы" и "Подработы" объединить т.к. это скорее всего небольшие словари, так же таблицу "Результаты" сделать словарём. Главной же таблицей сделать ТипыРезультатов.
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629970
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaM,
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629977
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaM,

Господа приаттачил табличку.
Итак:
Колонка1 - Это вид работ.
Колонка2 - Это вид подработ
Колонка3 - результат в зависимости от выбора колонки 3-7

соответственно:
листбокс1 - выбор вида работ
листбокс2 - выбор типа подработ в зависимости от выбранного от листбокс1
листбокс3 - выбор колонки 3-7

в результате получаем писло :)
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629982
FuzzySense
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Сложно сообразить, пока не перестроился работать на БД все по массивам :)
...
Рейтинг: 0 / 0
VB.net и сложные таблицы
    #36629993
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySenseлистбокс3 - выбор колонки 3-7

Значит я был прав, предусмотрев масштабирование по последним столбцам....

А в чем вопрос-то?
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB.net и сложные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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