Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.05.2011, 20:21
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию Заполнение TreeView из DB

приветствую всех
такая тема уже рассматривалась - http://www.delphisources.ru/pages/fa...eeview_db.html
это один из примеров
но там используются два поля, а в моем случае оно одно
и заполнено по примеру ниже:

# (Все)
8. (Товары)
8.1. (Прод)
8.2. (Непрод)
11. (Материалы)
11.2. (Строительные)
11.3. (Отделочные)
11.2.1. (Строительные краски)
11.2.2. (Строительные смеси)
11.3.1. (Отделочные смеси)

и вот этот ужОс я не могу победить
если кто сталкивался с построением дерева по примеру такого поля
киньте в меня
ну или подскажите как построить иерархию на одном поле, а не на двух
спасибо

Последний раз редактировалось KristoferRuotsi, 23.06.2011 в 19:50.
Ответить с цитированием
  #2  
Старый 14.05.2011, 21:28
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

в твоем случае как минимум два поля нужно.....
Ответить с цитированием
  #3  
Старый 14.05.2011, 22:09
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию

и тем не менее этот вариант используется для построения дерева
используется только одно поле, это поле, в программе "SM2000"
вопрос только как это повторить на языке Delphi
у меня есть предположение что нужно перебирать базу по записям
и каждую запись из этого поля "tree" рассматривать как массив символов
в котором подсчитывается количество вхождений символа (точка)
если 0 - то первый уровень
если 1 - то второй
и так далее
если с количеством вхождений все более или менее понятно
то как разбирать строку и из нее делать уровень я уже теряюсь
(да и сама работа с TreeView мне в новинку)
в общем мозговой шторм
Ответить с цитированием
  #4  
Старый 23.06.2011, 17:43
KristoferRuotsi KristoferRuotsi вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 36
Репутация: 10
По умолчанию

Пример создания таблицы для Oracle
Код:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY';
ALTER SESSION SET NLS_TIME_FORMAT = 'HH24:MI:SS.FF';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD.MM.YYYY HH24:MI:SS.FF';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'DD.MM.YYYY HH24:MI:SS.FF TZR';
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';
ALTER SESSION SET TIME_ZONE = '+00:00';
--
-- Описание для таблицы SACARDASSORT
--
CREATE TABLE SACARDASSORT (
  ID NUMBER(10) DEFAULT -1 ,
  TREE VARCHAR2(100) NOT NULL,
  NAME VARCHAR2(255) NOT NULL,
  FLAGS NUMBER(10) DEFAULT 0  NOT NULL,
  CREATOR NUMBER(10) DEFAULT -2  NOT NULL,
  CONSTRAINT SACCARDASSORT_PK PRIMARY KEY (ID),
  CONSTRAINT SACCARDASSORTROOTTREE CHECK ( ID=0 AND Tree='#'
            OR ID!=0 AND Tree!='#' ),
  CONSTRAINT SACCARDASSORTTREE UNIQUE (TREE) DEFERRABLE)
TABLESPACE USERS
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING
MONITORING;
--
-- Описание для триггера SACARDASSORTD
--
CREATE OR REPLACE TRIGGER SACARDASSORTD
  BEFORE DELETE ON SACARDASSORT FOR EACH ROW
BEGIN
    IF :old.ID=0 THEN
        Core.Fail((-20000-550));
    END IF;
END;
/
--
-- Описание для триггера SACARDASSORTUD
--
CREATE OR REPLACE TRIGGER SACARDASSORTUD
  BEFORE UPDATE OR DELETE ON SACARDASSORT FOR EACH ROW
DECLARE
    vUserID Office.EmployeeID;
    vRoleName SMClientFunctions.OraRole%TYPE;
BEGIN
    IF (AdminCore.IsSMPostSession='0') AND
        (BITAND(:old.Flags,1)!=0
        OR updating AND BITAND(:new.Flags,1)!=0)
    THEN
        Office.GetUserID(vUserID);
        IF vUserID!=:old.Creator THEN
            BEGIN
                SELECT OraRole INTO vRoleName
                    FROM SMClientFunctions
                    WHERE ID=811;
            EXCEPTION WHEN NO_DATA_FOUND THEN
                Core.Fail((-20000-507));
            END;
            IF NOT dbms_session.is_role_enabled(vRoleName) THEN
                Office.RaiseRoleNotGranted(FALSE,811);
            END IF;
        END IF;
    END IF;
END;
/
--
-- Описание для триггера SACARDASSORTUI
--
CREATE OR REPLACE TRIGGER SACARDASSORTUI
  BEFORE INSERT OR UPDATE ON SACARDASSORT FOR EACH ROW
BEGIN
    IF :new.ID<0 THEN
        SELECT SACardAssortSeq.NEXTVAL
        INTO :new.ID FROM DUAL;
    END IF;
    IF inserting OR updating('Tree') THEN
        IF NOT Classifier.IsClassifierPath(:new.Tree) THEN
            Core.FailMsg('Неверный формат пути в классификаторе «'||:new.Tree||'»', (-20000-551));
        END IF;
    END IF;
END;
/
--
-- Вывод данных для таблицы SACARDASSORT
--
INSERT INTO SACARDASSORT VALUES (0, '#', 'Все', 0, -2);
INSERT INTO SACARDASSORT VALUES (11, '8.', 'АКЦИИ ', 0, 9);
INSERT INTO SACARDASSORT VALUES (16, '11.', 'Собственное производство', 0, 16);
INSERT INTO SACARDASSORT VALUES (17, '11.1.', 'Кулинарный цех', 0, 16);
INSERT INTO SACARDASSORT VALUES (18, '11.1.1.', 'Кулинарный цех вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (19, '11.1.2.', 'Кулинарный цех шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (21, '11.2.', 'Мясной цех', 0, 16);
INSERT INTO SACARDASSORT VALUES (22, '11.2.1.', 'Мясной цех вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (23, '11.2.2.', 'Мясной цех шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (24, '11.3.', 'Кондитерский цех', 0, 16);
INSERT INTO SACARDASSORT VALUES (25, '11.3.1.', 'Кондитерский цех вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (27, '11.3.2.', 'Кондитерский цех шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (28, '11.4.', 'Пекарня', 0, 16);
INSERT INTO SACARDASSORT VALUES (30, '11.4.1.', 'Пекарня вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (31, '11.4.2.', 'Пекарня шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (36, '15.', 'УЛП', 2, 9);
INSERT INTO SACARDASSORT VALUES (45, '8.8.', 'Мега ', 2, 9);
INSERT INTO SACARDASSORT VALUES (46, '8.9.', 'Лучшая цена ', 2, 9);
INSERT INTO SACARDASSORT VALUES (47, '8.10.', 'Сезонка', 2, 9);
INSERT INTO SACARDASSORT VALUES (48, '8.11.', 'Распродажа', 2, 9);
INSERT INTO SACARDASSORT VALUES (49, '16.', 'СТМ ', 2, 9);
INSERT INTO SACARDASSORT VALUES (50, '17.', 'ТОП не изменять', 0, 49);
INSERT INTO SACARDASSORT VALUES (51, '17.1.', 'ТОП 500', 2, 49);
INSERT INTO SACARDASSORT VALUES (52, '18.', 'ТОП по группам', 1, 49);
INSERT INTO SACARDASSORT VALUES (53, '18.1.', 'колбаса', 2, 49);
INSERT INTO SACARDASSORT VALUES (54, '18.2.', 'фрукты', 2, 49);
-- Нет объектов для экспорта.

Пример создания таблицы для MySQL

Код:
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
USE SUPERMAG;
 
CREATE TABLE SUPERMAG.SACARDASSORT
(
  id INT(11) NOT NULL,
  tree VARCHAR(255) NOT NULL,
  name VARCHAR(255) NOT NULL,
  flags INT(10) NOT NULL,
  creator INT(10) NOT NULL
)
ENGINE = MYISAM
CHARACTER SET utf8
COLLATE utf8_general_ci;
 
INSERT INTO SACARDASSORT VALUES (0, '#', 'Все', 0, -2);
INSERT INTO SACARDASSORT VALUES (11, '8.', 'АКЦИИ ', 0, 9);
INSERT INTO SACARDASSORT VALUES (16, '11.', 'Собственное производство', 0, 16);
INSERT INTO SACARDASSORT VALUES (17, '11.1.', 'Кулинарный цех', 0, 16);
INSERT INTO SACARDASSORT VALUES (18, '11.1.1.', 'Кулинарный цех вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (19, '11.1.2.', 'Кулинарный цех шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (21, '11.2.', 'Мясной цех', 0, 16);
INSERT INTO SACARDASSORT VALUES (22, '11.2.1.', 'Мясной цех вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (23, '11.2.2.', 'Мясной цех шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (24, '11.3.', 'Кондитерский цех', 0, 16);
INSERT INTO SACARDASSORT VALUES (25, '11.3.1.', 'Кондитерский цех вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (27, '11.3.2.', 'Кондитерский цех шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (28, '11.4.', 'Пекарня', 0, 16);
INSERT INTO SACARDASSORT VALUES (30, '11.4.1.', 'Пекарня вес.', 2, 16);
INSERT INTO SACARDASSORT VALUES (31, '11.4.2.', 'Пекарня шт.', 2, 16);
INSERT INTO SACARDASSORT VALUES (36, '15.', 'УЛП', 2, 9);
INSERT INTO SACARDASSORT VALUES (45, '8.8.', 'Мега ', 2, 9);
INSERT INTO SACARDASSORT VALUES (46, '8.9.', 'Лучшая цена ', 2, 9);
INSERT INTO SACARDASSORT VALUES (47, '8.10.', 'Сезонка', 2, 9);
INSERT INTO SACARDASSORT VALUES (48, '8.11.', 'Распродажа', 2, 9);
INSERT INTO SACARDASSORT VALUES (49, '16.', 'СТМ ', 2, 9);
INSERT INTO SACARDASSORT VALUES (50, '17.', 'ТОП не изменять', 0, 49);
INSERT INTO SACARDASSORT VALUES (51, '17.1.', 'ТОП 500', 2, 49);
INSERT INTO SACARDASSORT VALUES (52, '18.', 'ТОП по группам', 1, 49);
INSERT INTO SACARDASSORT VALUES (53, '18.1.', 'колбаса', 2, 49);
INSERT INTO SACARDASSORT VALUES (54, '18.2.', 'фрукты', 2, 49);

и поле three тут успешно используется для построения дерева
как видите...
Ответить с цитированием
  #5  
Старый 01.07.2011, 15:10
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

KristoferRuotsi
Работаю также с классификаторами (министерскими).
В моей программе есть классы (на Delphi 7) - типа преобразование классификатора 11.13.23 в числа 11 13 23 и обратно, преобразование в код ((11*256+13)*256+23)*256 и др., могу выложить исходники модуля если нужно, или целой программы
http://www.delphisources.ru/forum/sh...ad.php?t=17502
Правда программа пока не доделана но классы отлажены и работают т к используются в других программах.

Последний раз редактировалось Viajero, 01.07.2011 в 15:14.
Ответить с цитированием
  #6  
Старый 28.02.2012, 17:55
Kristofer Kristofer вне форума
Начинающий
 
Регистрация: 10.07.2006
Сообщения: 110
Репутация: 10
По умолчанию

интересно посмотреть, скиньте пример
и ссылку на него
а то я тоже волнуюсь, кажеться предстоит таже беда
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:04.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025