Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Господа программисты! такой вопросик есть таблица вида: колонка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]) Желательно исходную таблицу не нормировать(нормализовать). Для решения, как вариант "бис" можно использовать дерево. Но лучше листбоксами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2010, 23:30 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Может вернемся к обсуждению? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 02:39 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Как вариант можно сделать скрытое TreeView на форме разок разобрать данные, забить в listbox1 всех родителей из получившегося TreeView, а остальные listbox-ы вырубить .Enable = False, по мере выбора .Enable подчинённого listbox-а ставить в True и забивать из TreeView в зависимости от уровня. Так же не забыть изменять данные в зависимости от изменения данных. По умолчанию в подчинённом listbox-е выставлять отсутствие выбора. PS: TreeView можно заменить на собственное написанное дерево ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 03:01 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
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-я строка. Приведите пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 10:02 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
А, кажется дошло, вы таким неимоверным образом попытались создать в таблице структуру подчинения. 100% нужна нормализация. Причем это на порядки облегчит не только эту задачу, но и все остальные задачи обработки этой таблицы. Причем из нормализованных таблиц с помощью представления можно запросто слепить то, что есть сейчас, а вот наоборот - никак! Поэтому подумайте. Допустим у вас есть код для обработки таблицы в таком виде. Сделайте нормализацию под другими именами таблиц, а для этой создайте представление с бывшим именем таблице и ничего из старого кода переделывать не придется. Если же нормализация невозможна, тогда: У вам не хватает исходных данных. Из чего следует, что "Подработа3" подчиняется "Работе1"? Не из чего. Только не говорите мне, что из позиции в таблицы. В SQL нет понятия позиции, данные хранятся там как билл гейтс на душу положит, и никакой гарантии, что они всегда будут выводиться в одном и том же порядке нет. Скорее всего вы либо используете ID и сортируете по нему, либо есть нечто, определяющее порядок или подчиненность. Но этого вы в ТЗ не приводите. Если скорректируете ТЗ - можно подумать, как решить это с помощью SQL. Но при отсутствии структуры подчиненности (то есть только сортировочный ИД) без курсора мы не обойдемся. Либо можно действительно загрузить эту таблицу в массив в памяти и обрабатывать из массива. Это, конечно, самый дурацкий путь (полагаю, что реальная таблица состоит у вас из гораздо большего количества записей, чем вы привели), но можно и так. Причем опять же можно создать в памяти нормализованный набор массивов (а может лучше коллекций). То есть под Колонку1 завести отдельный массив, под Колонку2 - другой массив, прописав в него ссылки на 1-й массив для каждого элемента. Ну во второй массив можно загнать и Колонки 3 и 4, сделав его двумерным. Что вызывает сложности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 10:27 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.ProНо при отсутствии структуры подчиненности (то есть только сортировочный ИД) без курсора мы не обойдемся. Хотя нет, обойдемся. 1) выбираем ID, соответствующий выбранной позиции listbox1 2) выбираем с помощью TOP 1 ID следующей позиции из первой колонки 3) Выбираем данные из второй колонки для listbox2 между п.1 (включительно) и п.2 (не включительно) Учитываем возможный NULL в п.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 10:44 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Я думал про подчиненности, но плодить таблички, как то "некрасиво". Продумывал различные комбинации вида матрицы, но как видно трудно получить зависимости Подработ от Работы (комбинация подработ может меняться) я так понимаю проще состряпать несколько массивов с названием работ включить в нее конкретные подработы, и так для каждого вида работы. Но очень уж нудно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:12 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, В общем как ни крути надо плодить таблички.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:17 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Не, ну можно, конечно прописать подчиненность второго столбца первому прямо в этой же таблице. Или превратить ее в такой вид: колонка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 это будет чуть правильней, чем предыдущая. Первую строку исключил нарочно, ибо ни к селу, ни к городу. Потому что нефиксированное количество подуровней не организовывают с помощью нефиксированного набора столбцов (разворачивают в строки), а фиксированное - и так заранее известно, зачем засорять таблицу посторонними данными. У вас какой-то экселевский подход к этой таблице. БД так не проектируют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:23 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.ProПервую строку исключил нарочно, ибо ни к селу, ни к городу ой, в итоге не исключил в примере, но ей там не место ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:24 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
FuzzySenseЯ думал про подчиненности, но плодить таблички, как то "некрасиво". Некрасиво то, что привели вы. Красиво - это реляционный подход к реализации в реляционных СУБД. Недаром про нормализацию написано на первых страницах всех учебников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:26 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Надо было сразу предупредить что в запросах я слабоват. Так вот если табличку нормализовать как у вас то как листбокс загнать только одно значение из 1 ой колонки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:55 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:56 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Да, подход экселевский, т.к. изначально планировал данные таскать из xls. Но поразмыслив о защищенности такой "БД", решил выбрать из двух подходов - массив и БД с SQL. По поводу первой строки, из колонки3 и колонки4 первой строки, будет заполняться листбокс3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 12:58 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, я имел ввиду, чтоб значения в листбоксе не повторялись :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 13:00 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
FuzzySenseПо поводу первой строки, из колонки3 и колонки4 первой строки, будет заполняться листбокс3 Не надо проектировать глупости!!!!!!! Если вам надо заполнять листбокс из базы, заведите для этого отдельную таблицу. FuzzySenseя имел ввиду, чтоб значения в листбоксе не повторялись :) Я дал запрос, где значения не повторяются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 13:04 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, т.е. получается такая структура: табл1 содержит колонка1 табл2 содержит колонка2, 3, 4 табл3 содержит строку из колонок 3 и 4 остается только связи по ключам организовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 13:09 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Ну если уж решились нормализовать и сделать совсе по уму - то вот так должно быть. В таблицу "ТипыРезультатов" в "Код" вы заносите две записи - 1 и 2. Это соответствует двум столбцам результатов. В таблицу "Результаты" вы заносите все результаты из колонки 3 и 4, причем сплошняком (то есть не разбивая на две колонки). А ссылку на колонку дополнительно указываете в столбце "ТипРезультата". Таким образом у вас получается удобная и масштабируемая система, где количество колонок с результатами не ограничено двумя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 13:20 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
FuzzySense, Опиши свою задачу, по тому что без знания что нужно в конечном счёте получить нормальную нормализацию не сделать. Я бы предложил таблицы "Работы" и "Подработы" объединить т.к. это скорее всего небольшие словари, так же таблицу "Результаты" сделать словарём. Главной же таблицей сделать ТипыРезультатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 15:44 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
SashaM, Господа приаттачил табличку. Итак: Колонка1 - Это вид работ. Колонка2 - Это вид подработ Колонка3 - результат в зависимости от выбора колонки 3-7 соответственно: листбокс1 - выбор вида работ листбокс2 - выбор типа подработ в зависимости от выбранного от листбокс1 листбокс3 - выбор колонки 3-7 в результате получаем писло :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 16:15 |
|
||
|
VB.net и сложные таблицы
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Сложно сообразить, пока не перестроился работать на БД все по массивам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2010, 16:18 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=128&tid=2159791]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
37ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 187ms |

| 0 / 0 |
