Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2017, 11:18   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Dryid466 Посмотреть сообщение
TreeViewAddChild
это какая-то ваша локальная процедура? В ней же тоже нужно сохранять код элемента, не так ли?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.10.2017, 11:49   #12
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

да верно, она строит ветки, но ид не присваивает, но нужно
Хотя главная присваивает этим кодом
TreeView1.Items.AddChildObject(nil, Q1.FieldByName('R_Name').AsString,P ointer(Q1.FieldByName('R_Num').AsIn teger));

если дублировать код и в под ветки, выдает ошибку якобы поле R_Num не найдено...

Последний раз редактировалось Dryid466; 30.10.2017 в 11:51.
Dryid466 вне форума Ответить с цитированием
Старый 30.10.2017, 12:08   #13
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Хотя главная присваивает этим кодом
TreeView1.Items.AddChildObject(nil, Q1.FieldByName('R_Name').AsString,P ointer(Q1.FieldByName('R_Num').AsIn teger
и берет данные отсюда( из такого НД)
Цитата:
Код:
  Q1.SQL.Add('select * from Razdels where R_Parent=0');
а для дочерних код НД совсем другой (в т.ч. другой список полей)
Цитата:
Код:
  Q1.SQL.Append('select r.R_Name, d.R_Name '+
                    'from Razdels r, Razdels d '+
                    'where r.R_Num=d.R_Parent');
Цитата:
если дублировать код и в под ветки, выдает ошибку якобы поле R_Num не найдено...
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.10.2017, 12:55   #14
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

я так понимаю проблема в этом запросе как раз....
Dryid466 вне форума Ответить с цитированием
Старый 30.10.2017, 13:03   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
я так понимаю проблема в этом запросе как раз....
если понимаете, то исправляйте. Делайте запрос аналогичный первому.
Но получайте не элементы главного списка(не имеющие родительского), а элементы имеющие вполне определенный корневой(родительский).
И ВЕСЬ необходимый перечень полей в этом списке.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.10.2017, 13:47   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Dryid466 Посмотреть сообщение
я так понимаю проблема в этом запросе как раз....
ну, я бы так "в лоб" предложил вариант запроса:

Код:
Q1.SQL.Append('select r.R_Name, d.R_Name, r.R_Num from Razdels r, Razdels d '+
 ' where r.R_Num=d.R_Parent');
Цитата:
Сообщение от Dryid466 Посмотреть сообщение
да верно, она строит ветки, но ид не присваивает, но нужно
приведите тут код процедуры TreeViewAddChild


p.s. а вообще не вижу проблем.
1) изменяем описание процедуры TreeViewAddChild, добавляем 3-й параметр db_node_id : integer
2) в теле процедуры TreeViewAddChild заменяем
TreeView1.Items.AddChild на
TreeView1.Items.AddChildObject(.... , Pointer(db_node_id) );
3) изменяем вызов на
TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString, Q1.Fields[2].AsInteger);

всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.11.2017, 18:57   #17
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

Код:
var
    MyRecPtr: PMyRec;
  TreeViewIndex: LongInt;
   db_node_id : integer;
begin
 
  if tRazdels.IsEmpty then Exit;

  TreeView1.Items.Clear;

  Q1.SQL.Clear;
  Q1.SQL.Add('select * from Razdels where R_Parent=0');
  Q1.Open;
  if Q1.IsEmpty then Exit; 

  while not Q1.Eof do begin
    TreeView1.Selected := nil;
   


    TreeView1.Items.AddChildObject(nil, Q1.FieldByName('R_Name').AsString, Pointer(Q1.FieldByName('R_Num').AsInteger), Pointer(db_node_id));
    

    Q1.Next;
  end;

  Q1.SQL.Clear;
  
        Q1.SQL.Append('select r.R_Name, d.R_Name, r.R_Num from Razdels r, Razdels d '+' where r.R_Num=d.R_Parent');

  Q1.Open;
  if Q1.IsEmpty then Exit; 
  Q1.First;
  while not Q1.Eof do begin

  //TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString);

TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString, Q1.Fields[2].AsInteger);

    Q1.Next;
  end; //while

  TreeView1.FullExpand;

Что то я делаю не так, или что то забыл поменять ... Возникает ошибка too many actual parameters... Что я делаю не так?
Dryid466 вне форума Ответить с цитированием
Старый 01.11.2017, 19:29   #18
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Dryid466 Посмотреть сообщение
Возникает ошибка too many actual parameters... Что я делаю не так?
А делфи уже сказала что не так...
Цитата:
too many actual parameters
Нажимаем волшебную клавишу F1 и что мы видим?
Цитата:
AddChild method (TTreeNodes)
function AddChild(Node: TTreeNode; const S: string): TTreeNode;
Вы в состоянии посчитать количество аргументов и сравнить со своим?
Вы хэлпом совсем-совсем пользоваться не умеете?
Или не хотите из религиозных соображений?
kropotkina-alice вне форума Ответить с цитированием
Старый 01.11.2017, 19:30   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Dryid466 Посмотреть сообщение
Что то я делаю не так, или что то забыл поменять ...
забыли выполнить пункты 1) и 2)


Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Нажимаем волшебную клавишу F1 и что мы видим?
у ТС процедура с именем TreeViewAddChild куда передаются (передавались) две строки...
процедура, судя по всему, самописная, надстройка над AddChild, с поиском нужного узла, в который нужно добавить потомка.

Последний раз редактировалось Serge_Bliznykov; 01.11.2017 в 19:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.11.2017, 21:00   #20
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
По умолчанию

Как вы сказали выше, в 1 пункте изменяем описание процедуры
Цитата:
{ Private declarations }
procedure TreeViewAddChild(rod, doch: String; db_node_id : integer);
здесь вы имеете в виду? прописал теперь.

Далее
2) в теле процедуры TreeViewAddChild заменяем
TreeView1.Items.AddChild на
TreeView1.Items.AddChildObject(.... , Pointer(db_node_id) );

Я так понимаю
Цитата:
TreeView1.Items.AddChildObject(nil, Q1.FieldByName('R_Name').AsString, Pointer(Q1.FieldByName('R_Num').AsI nteger));
это нужно заменить на
Цитата:
TreeView1.Items.AddChildObject(nil, Q1.FieldByName('R_Name').AsString, Pointer(Q1.FieldByName('R_Num').AsI nteger), Pointer(db_node_id));
Dryid466 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DbGrid + TreeView + CheckBox tarakan1983 БД в Delphi 13 03.12.2015 22:45
Отображение данных в DBGrid через TreeView nagi12-02 C++ Builder 0 17.01.2014 11:20
treeview с dbgrid Romium БД в Delphi 5 13.04.2013 08:10
DbGrid и Treeview c DbRichEdit ch1pah1 БД в Delphi 1 13.01.2012 05:47
Выборка в DBGrid по выбору узла в TreeView WhiteDemon БД в Delphi 13 17.02.2011 19:29