|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Заполнение 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
|
||||
|
||||
в твоем случае как минимум два поля нужно.....
|
#3
|
|||
|
|||
и тем не менее этот вариант используется для построения дерева
используется только одно поле, это поле, в программе "SM2000" вопрос только как это повторить на языке Delphi у меня есть предположение что нужно перебирать базу по записям и каждую запись из этого поля "tree" рассматривать как массив символов в котором подсчитывается количество вхождений символа (точка) если 0 - то первый уровень если 1 - то второй и так далее если с количеством вхождений все более или менее понятно то как разбирать строку и из нее делать уровень я уже теряюсь (да и сама работа с TreeView мне в новинку) в общем мозговой шторм |
#4
|
|||
|
|||
Пример создания таблицы для Oracle
Код:
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 Код:
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
|
||||
|
||||
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
|
|||
|
|||
интересно посмотреть, скиньте пример
и ссылку на него а то я тоже волнуюсь, кажеться предстоит таже беда |