Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 30.10.2017, 12:18   #11
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,419
Репутация: 5187
По умолчанию

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

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

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

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

Цитата:
Хотя главная присваивает этим кодом
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, 13:55   #14
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
Репутация: 10
По умолчанию

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

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

Цитата:
Сообщение от 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, 19:57   #17
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
Репутация: 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, 20:29   #18
kropotkina-alice
Участник клуба
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Адрес: в России
Сообщений: 595
Репутация: 574
По умолчанию

Цитата:
Сообщение от 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, 20:30   #19
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,419
Репутация: 5187
По умолчанию

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


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

Последний раз редактировалось Serge_Bliznykov; 01.11.2017 в 20:32.
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 01.11.2017, 22:00   #20
Dryid466
Пользователь
 
Регистрация: 04.06.2016
Сообщений: 10
Репутация: 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 вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DbGrid + TreeView + CheckBox tarakan1983 БД в Delphi 13 03.12.2015 23: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 20:29


10:52.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru