Типы программирования, программирование, языки программирования, книги программирование На сайте представлена информация про программирование в Интернете и работу  

Помогите начинающему!, Как поставить закладку в таблице?
Поиск по БД
Отображение данных в TDBComboBox, Не получается...
Регистр букв при работе с dbf ч/з ADO, Как сделать запрос неразличимый к рег-ру
Какие есть способы поиска в DBGrid1 ?
обновление параметров
Как Вы относитесь к курящим девушкам?
WinAPI, GetUserName
Пароль на таблице, где его вводить?
Запрос на проверку при удалении
Delphi + Oracle, длиная строка
Обзор таблицы через TreeView1, Задача
Как поместить картинку в BLOB поле
Надпись "Unregistered version" в FR, Как убрать?
Транзакции, SQL
DBGrid, Скроллинг не работает
База данных в dbf формате, Помогите обработать DBF
выделению оперативной памяти под бд
Работа с TStringList., __
Ограничить размер кэша для SQLQuery, как можно ограничить размер кэша
Delphi+ADO+MS SQL2000
Помогите. Вопрос по ЗАПРОСУ, там вопрос про оператор like
Различия синтаксиса SQL
Как можно получить кол-во строк рез-та запроса?
InstallShield. Проблема с клиентом для MySQL
Запрос в базе данных
работа с apolo v6.0 dbf & cdx, открытие двух dbf афйлов
Преобразование, dbf в cds
БД Paradox на лежит на хосте., Как получить к ней доступ из программы
Поиск, Поиск
Как получить список доступных БД?, Как получить список доступных БД?
Запрос SQL, как объединить два разнотипных поля?
Нумерация выборки????????, Доб-ть счет-к к DBGrid-у не зав. от сорт
TADOQuery и параметры, ADO и MSSQL
База данных в dbf формате, Помогите обработать DBF
минимизировать связку компонентов, MySQL, DbExpress
DBGrid и AdoQuery, не изменяется значение в столбце :(
TdxDBGrid, сохранение в реестр, Как загрузить данные ????
в чем разница между NT и 2000
Запросы и параметры, или как избавится от многих проблем….
закрытие чужой программы
Побайтное чтение и запись, Неизвестная база *.DAT (возможно BTree)
Сохранение в Blob поле .... [ABsolute DB]
Не открывается картинка из бд, access в дельфи через ado
организация поиска в БД
DBGrid, как что-то дописать в ячейке
Разрыв страницы в Fast Report, на скриптовом языке?
Real округляется до Integer, Oracle через BDE
BDE,DBF,SQL, запрос с агрегатными функциями
Перенос на страницы, FastReport
БД и Дерево, Какие функции надо использовать
Вопрос о реестре, новые методы
Как Вы относитесь к курящим девушкам?
Ссылки на литературу по работе с БД в Delphi
Из ячейки в Memo
Переходим на клиент-сервер (советы), на примере MS SQL Server
MS SQL
dbf через ADO, каракули
Таблица с разными полями, Paradox, BDE
ADO + OLEException, Генерация исключений
Узнать, пусто ли Blob-поле, Access, Ado
Печать с двух сторон, как реализовать???
RichEdit
У меня к вам ышо вопросик есть ебаут Creating
Проблемма с БД
Проблемы с Query и DataSource
удаленная БД, организационные вопросы
Импорт данных Excel -> dbf, нужен пример импорта данных
Перенос БД (ФайлСервер -> КлиентСервер), Paradox -> MySQL
Как с помощью ADO открыть таблицу dBase (.dbf)

Платные хостинги     Раскрутка сайта     Книги по программированию


Обзор таблицы через TreeView1, Задача

Только здесь 1000 посетителей на Ваш сайт всего за 3 у.е.!

- Создал таблицу и псевдоним с именем Lavocka.Таблица такая - таблица описывает предприятие, у каждого рабочего имеется свой универсальны код в таблице,и дополнительный код, который означает - у кого в подчинение данный рабочий, вот таблица:code name dopcode proffession0033 bos 0000 director0084 ivanov 0033 menejer0085 vasichkin 0033 menejer0097 ohlamonov 0084 menejer's p0moshnik 0097 ohlamonov 0085 menejer's p0moshnikМне нужно через дерево TreeView1, используя SQL -запросы отобразить базу данных,следующим образом :-bos _ _ _-ivanov_ _ _ _ _ _ohlamonov_ _ _-vasichkin_ _ _ _ _ _ohlamonovподскажите пожалуйста, как нужно чего делать?????????????

- УУУ, чего захотел!компонент TDBTree поищи в каком-нить яндексе.

- Вот в этой теме посмотри

- Для построения данного дерева нужно использовать рекурсию. Вариантов может быть несколько. Если БД на SQL сервере то могу предложить следующее:Создать на сервере 2 хранимые процедуры, которые используя рекурсию сформируют промежуточную таблицу, на основании которой delphi построит дерево.Процедура 1Код CAREATE PROCEDURE TREEADDASBEGINDECLARE @TREEID AS INT, @TREEUPID AS INT, @DESC AS VARCHAR(255), @POZ AS INTCREATE TABLE #RESULT(TYPE VARCHAR(10),       DESCR VARCHAR(255),       IDREC INT)DECLARE #PRIMARY_TREE CURSOR LOCAL FAST_FORWARD FOR SELECT TREEID, TREEUPID, DESCRIPTIONFROM STRUCTUREWHERE TREEUPID = 0OPEN #PRIMARY_TREEWHILE @@ERROR=0   BEGIN    FETCH NEXT FROM #PRIMARY_TREE INTO @TREEID, @TREEUPID, @DESC     IF @@FETCH_STATUS<>0 BREAK INSERT INTO #RESULT VALUES('Nil',@DESC,@TREEID) SET @POZ = (SELECT COUNT(*) FROM #RESULT)-1 EXECUTE RECURSADD @TREEID,@POZ   END   CLOSE #PRIMARY_TREE DEALLOCATE #PRIMARY_TREESELECT * FROM #RESULTDROP TABLE #RESULTEND highlightSyntax('sqlZTczMT','sql');Процедура 2Код PROCEDURE RECURSADD @TREEID INT, @POZITION INTASDECLARE #REVERS CURSOR LOCAL FAST_FORWARD FOR SELECT TREEID, TREEUPID, DESCRIPTIONFROM  STRUCTUREWHERE TREEUPID = @TREEIDOPEN #REVERSDECLARE @TRID AS INT, @TRUPID AS INT, @DESCR AS VARCHAR(255), @POZ AS INTWHILE @@ERROR=0   BEGIN FETCH NEXT FROM #REVERS INTO @TRID, @TRUPID, @DESCR        IF @@FETCH_STATUS <>0 BREAK INSERT INTO #RESULT VALUES(CAST(@POZITION AS VARCHAR),@DESCR,@TRID) SET @POZ = (SELECT COUNT(*) FROM #RESULT)-1 EXECUTE RECURSADD @TRID,@POZ   END   CLOSE #REVERSDEALLOCATE #REVERShighlightSyntax('sqlg5Y2M0','sql');В Delphi пишем процудеру формирования дерева:Код with ADOQuery2 do  begin   SQL.Clear;   SQL.Add('exec TREEADD');   Open;  end;ADOQuery2.First;TreeView1.Items.Clear;TreeView1.Items.BeginUpdate;while not ADOQuery2.Eof do  begin     IF ADOQuery2.FieldByName('TYPE').AsString = 'Nil' then        BeginTreeView1.Items.AddChildObject(nil,  ADOQuery2.FieldByName('DESCR').AsString,  Pointer(ADOQuery2.FieldByName('IDREC').AsInteger));        End     Else        BeginTreeView1.Items.AddChildObject(TreeView1.Items[ADOQuery2.FieldByName('TYPE').AsInteger],ADOQuery2.FieldByName('DESCR').AsString,Pointer(ADOQuery2.FieldByName('IDREC').AsInteger));        End;    ADOQuery2.Next;  End;TreeView1.Items.EndUpdate;highlightSyntax('delphiU3NGM1','delphi');При этом всю основную нагрузку по формированию данных выполняет SQL сервер а Delphi лишь остается нарисовать дерево пройдясь по всем строчкам в возвращенном наборе данных.Либо можно организовать рекурсивное построение дерева средствами самого Delphi. каму как больше нравится. Это сообщение отредактировал BSV_Sergey - 10.12.2004, 14:43

- BSV_Sergey, спасибо, но я сделал бд используя BDE, извиняюсь, что неполностью всё не описал, как с помощью компонентов DataSourse и Query добиться решения задачи? Это сообщение отредактировал Ddddddelphi - 10.12.2004, 23:16

- Ну, берешь, Query, которые выбирает сотрудников первого уровня - саамых главных, - из этого списка, создаешь, узлы первого уровня, затем берешь первый узел, смотришь сотрудников, которые ему подчиняются, - это узелы второго уровня для первого узла, затем, берешь первый узел второго уровня, для первого начальника, смотришь какие люди ему подчиняются,... и т.д.Вот и построишь дерево.

- Алгоритм формирования дерева можно организовать используя код приведенный ниже. Возможно его удастся улучшить, это первое решение, которое пришло мне в голову;Структура таблицы используемой в примере:REPORTTREEtreeid description treeupid1 tree1 02 tree2 13 tree3 1 и тдТекст модуля:Код unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, DB, ADODB, StdCtrls, ComCtrls;type  TForm1 = class(TForm)    ADOQuery1: TADOQuery;    TreeView1: TTreeView;    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }    gNOM:integer;//Глобальный счетчик количества ветвей в дереве  end;var  Form1: TForm1;procedure treeadd();Function recursADD(id:string;nomer:integer):Boolean;implementation{$R *.dfm}procedure treeadd();var     sSQL,treeid:string;        n,i:integer;beginForm1.gNOM := -1;sSQL := 'select count(*) as counttree from REPORTTREE where treeupid = 0';with form1.ADOQuery1 do begin  Close;  SQL.Clear;  SQL.Add(sSQL);  Open; end;treeid := '';n := Form1.ADOQuery1.FieldByName('counttree').AsInteger;for i:=1 to n do begin  if treeid = '' then    sSQL := 'Select top 1 * from REPORTTREE where treeupid = 0'  else    sSQL := 'Select top 1 * from REPORTTREE where treeupid = 0 and treeid not in ('+treeid+')';   with form1.ADOQuery1 do    begin     Close;     SQL.Clear;     SQL.Add(sSQL);     Open;    end;   if treeid = '' then     treeid :=Form1.ADOQuery1.FieldByName('treeid').Asstring   else     treeid := treeid + ','+Form1.ADOQuery1.FieldByName('treeid').Asstring;    Form1.TreeView1.Items.BeginUpdate;    Form1.TreeView1.Items.Add(nil,Form1.ADOQuery1.FieldByName('DESCRIPTION').AsString);    Form1.gNOM := Form1.gNOM + 1;    recursADD(Form1.ADOQuery1.FieldByName('treeid').AsString,Form1.gNOM); end; Form1.TreeView1.Items.EndUpdate;end;Function recursADD(id:string;nomer:integer):Boolean;var     sSQL,treeid:string;        i,n:integer;beginsSQL := 'select count(*) as counttree from REPORTTREE where treeupid = '+id;with form1.ADOQuery1 do begin  Close;  SQL.Clear;  SQL.Add(sSQL);  Open; end;treeid := '';n := Form1.ADOQuery1.FieldByName('counttree').AsInteger;if n > 0 thenfor i:=1 to n do begin  if treeid = '' then    sSQL := 'Select top 1 * from REPORTTREE where treeupid = '+id  else    sSQL := 'Select top 1 * from REPORTTREE where treeupid = '+id+' and treeid not in ('+treeid+')';   with form1.ADOQuery1 do    begin     Close;     SQL.Clear;     SQL.Add(sSQL);     Open;    end;   if treeid = '' then     treeid :=Form1.ADOQuery1.FieldByName('treeid').Asstring   else    treeid := treeid + ','+Form1.ADOQuery1.FieldByName('treeid').Asstring;   Form1.TreeView1.Items.AddChild(Form1.TreeView1.Items[nomer],Form1.ADOQuery1.FieldByName('DESCRIPTION').AsString);   Form1.gNOM := Form1.gNOM + 1;   recursADD(Form1.ADOQuery1.FieldByName('treeid').AsString,Form1.gNOM); end;end;procedure TForm1.Button1Click(Sender: TObject);begintreeadd();end;end.highlightSyntax('delphi2FiMDE','delphi');Ddddddelphi Надеюсь, я не слишком опоздал с ответом и мое решение еще актуальною Это сообщение отредактировал BSV_Sergey - 16.12.2004, 15:01

- BSV_Sergey, актуально, я учусь для себя поками-сь.... cпасибо!!!!! поработаю...глупые вопросы, а:Структура таблицы используемой в примере:REPORTTREEэто из стандартных? не нашёл...c этим ладноtreeid description treeupid1 tree1 02 tree2 13 tree3 1 и тдчё воще означает? Это сообщение отредактировал Ddddddelphi - 16.12.2004, 15:55

- Таблица REPORTTREE - содержит 3 столбца:treeid - id ветви дерева description - название ветви дереваtreeupid - какой ветви дерева подчиняется.В случае если treeupid = 0 - ветвь является контевой ветвью дерева и не кому не подчиняется.Я назвал таблицу REPORTTREE, в твоей программе она может называться по другому. В твоем примере, если я правильно понял code - это treeid в моей таблице name - description, dopcode - treeupid.К примеру дерево на основе следующих данных:treeid description treeupid1 Иванов 02 Петров 13 Сидоров 1 4 Смирнов 35 Наумов 2будет выглядеть так- Иванов----Петров-------Наутов----Сидоров-------Смирнов Это сообщение отредактировал BSV_Sergey - 16.12.2004, 17:13

- Я посмотрел твой пример. У тебя есть возможность, что у одного сотрудника могут быть несколько руководителей. В данной ситуации я еще посоветовал бы слегка изменить структуру таблиц, чтобы избежать избыточности данных. Можно создать таблицу с информацией о сотрудниках, к примеру Employee (employeeid(ID сотрудника), lastname, firstname, post и тд) и таблицу Hierarchy (employeeid, chiefid) в которой будет прописана орг структура предприяпия. В поле employeeid будет храниться ID сотрудника из таблицы employee, а в поле chiefid – ID сотрудника из таблица employee, который является руководителем первого.Example:Employee1 ivanov ivan Manager2 petrov ivan Chief of Branch of Department3 sidorov petr DirectorHierarchy3 01 32 31 2Дерево будет выглядеть так--sidorov----ivanov----petrov--------ivanovХотя мож это и лищнее, смотри сам..

- Еще прощеСтавищ EhLib 3.5, если еще не стоитВ оэтой библиотеке много полезного, в том числе есть и такая фича, которая тебе нужна, по трем полям построить дерево.

- попытался отсканировать пару страниц из книги "Мир Interbase"получилось кривовато есть таблица[ID_GOODS] [ID_PARENT_GOODS] [GOOD_NAME]1 0 GOODS2 1 Бытовая техника3 1 Компьютеры и комплектующие4 2 Холодиль ники5 2 Стиральные машины6 4 Трехкамерные7 4 Двухкамерные8 4 Однокамерные9 5 Вертикальные10 5 Фронтальные11 10 Узкие12 10 КлассическиеDECLARE VARIABLE CURR_CHILD_NAME VARCHAR(80);BEGIN/*Организуем внешний цикл FOR SELECT no непосредственным потомкам товара с ID_GOOD=ID_GOOD2SHOW */FOR SELECT gt1.id_good, gt1.good_nameFROM GoodsTree gt1WHERE gt1.id_parent_good=:ID_good2showINTO:ID_CHILD_G00D, :full_goods_nameDOBEGIN/*Проверка с помощью функции EXISTS, которая возвращаетTRUE, если запрос в скобках вернет хотя бы одну строку.Если у найденного узла с ID_PARENT_GOOD = ID_CHILD_GOOD нет потомков,то он является "листом" дерева и попадает в результаты */IF (NOT EXISTS(SELECT * FROM GoodsTreeWHERE GoodsTree.id_parent_good=:id_child_good))THEN BEGIN/* Передаем "лист" дерева в результаты */SUSPEND;ENDELSE/* Для узлов, у которых есть потомки*/BEGIN/*сохраняем имя узла-родителя во временной переменной */CURR_CHILD_NAME=full_goods_name;/ * рекурсивно запускаем эту процедуру */FORSELECT ID_CHILD_GOOD, full_goods_nameFROM GETFULLNAME (:ID_CHILD_GOOD)INTO:ID_CHILD_GOOD, :full_goods_nameDO BEGIN/*добавляем имя узла-родителя к найденному имени потомка с помощью операции конкатенации строк || */full_goods_name=CURR_CHILD_NAME||' '||full_goods_name;SUSPEND; /* возвращаем полное имя товара*/ENDENDENDENDЕсли мы выполним данную процедуру с входным параметром ID_GOOD2SHOW=1, то получим следующее:FULL_GOODS_NAME FULL_GOODS_NAMEБытовая техника Холодильники Трехкамерные 6Бытовая техника Холодильники Двухкамерные 7Бытовая техника Холодильники Однокамерные 8и т.д. Это сообщение отредактировал dsergey - 21.12.2004, 12:57

- @dsergey "Мир Interbase"-что за книга? специально для Дельфи или? До изучения Interbase по книге ещё не дошёл, надо будет твой код рассмотреть, когда дойду.

- "Мир Interbase (вторая редакция)" это, насколько я знаю единственная книга на русском языке по Interbase, для Delphi там не очень много, еще продается с ней компакт-диск, там прилочно информации, компонентов, а также кроме IB7, есть "огненная утка"

Интернет казино     Онлайн игры     Увеличение члена     Купить DVD


Главная страница | программирование 1с учебник | программирование сотовых | офшорное программирование | примеры линейное программирование | анализ программирование | программирование делфи | cgi программирование | программирование atmel | школа программирования | типы программирования | практика программирования | программирование autocad | программирование профессиональное | обзор языков программирования | среда программирования delphi | задачи целочисленного программирования | характеристика языка программирования | стиль программирования | постановка задачи программирование | программирование серверов | программирование диплом скачать | применение программирования | Ссылки

Все про практика программирования