Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TreeView и данные из таблицы [D7, IB6.x]


Xmen ©   (2007-06-21 09:16:00) 

У меня такой вопрос я в своей проге исползую TreeView и даю значения ему так:
procedure TFUserView.RefreshTree;
var Nodes : TTreeNode;
   i : Integer;
   abc:string;
   PK :^Integer;
begin
 abc:='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЧШЭЮЯ';
 with TreeView1.Items do
    begin
     BeginUpdate;
     Clear;
      for i := 1 to 28 do
        begin
         Nodes := Add(TreeView1.Selected,copy(abc,i,1));
         with DMLibrary.dstUser do
           begin
              DisableControls;
              if Active then Close;
              Screen.Cursor := crHourGlass;
              SelectSQL.Clear;
              SelectSQL.Add(' SELECT * FROM user_lib');
              SelectSQL.Add(' WHERE familiya like '''+copy(abc,i,1)+'%'+'''');
              SelectSQL.Add(' order by familiya');
              try
                Open;
              except
                ShowMessage('Ошибка выполнения запроса');
                Screen.Cursor := crDefault;
                exit;
              end;
              EnableControls;
              Screen.Cursor := crDefault;
           end;
         DMLibrary.dstUser.Open;
         DMLibrary.dstUser.First;

         while not DMLibrary.dstUser.EOF do
          begin
           new(PK);
           PK^ := DMLibrary.dstUser.fieldbyname('ID').AsInteger;
           AddChildObject( Nodes,DMLibrary.dstUser.fieldbyname('fio').AsString,PK);
           
           DMLibrary.dstUser.Next;
          end;
        end;
     EndUpdate;
    end;
end;
И так у меня получается дерево фамилей по алфавиту.
И когда выбераю фамилию из списка то в форме есть таблица и там должен появится данные из базы соответствуюшие этой фамилии. Уменя это получается но с одной загвоздкой если однофамилци есть то после запроса показывается для первого чела по этой фамили. А запрос такой:
procedure TFUserView.TreeView1Click(Sender: TObject);
var
s,i,v:string;
begin
s:=copy(TreeView1.Selected.Text,1,pos(' ',TreeView1.Selected.Text));
if s = '' then
 begin
  DMLibrary.dstUser.Close;
  DMLibrary.dstKartochka.Close;
 end;

with TreeView1 do
 if Selected.Level = 1 then
   begin
    with DMLibrary.dstUser do
     begin
      DisableControls;
      if Active then Close;
      Screen.Cursor := crHourGlass;
      SelectSQL.Clear;
      SelectSQL.Add(' SELECT * FROM user_lib');
      SelectSQL.Add(' WHERE familiya = '''+s+'''');
      try
        Open;
      except
        ShowMessage('Ошибка выполнения запроса');
        Screen.Cursor := crDefault;
        exit;
      end;
      EnableControls;
      Screen.Cursor := crDefault;
     end;
    DMLibrary.dstUser.Open;
    DMLibrary.dstKartochka.Close;
    DMLibrary.dstKartochka.ParamByName('UserId').Value:= DMLibrary.dstUser.fieldbyname('ID').AsVariant;
    DMLibrary.dstKartochka.Open;
    exit;
   end;
end;
Знаю что мои коды неидиалные, могут быт гдето ошибки. Если я чтото пропустил при написания вопроса то можете спросить могу дать уточнения.


Xmen   (2007-06-22 08:18:00) [1]


> Уверен, что не издеваешься? В [6] даже слово написано "Используем:
> "! Или, чукча - не читатель, чукча - писатель?

А понял на что намикаеш :) я этого пропустил


Xmen   (2007-06-22 08:15:00) [2]


> Зачем тогда "Если увас пример по ТриВю в котором исползуются
> данные из базы и получения значений из ТриВю или др. Если
> есть то сбрости на rustam@netman.ru."? У всех код написан
> теми же непонятными буквами :)

Думаю у вас будет другой код :) непохоже на этот пример, вед программисты все пишут по разному у всех есть свой стиль.

> Уверен, что не издеваешься? В [6] даже слово написано "Используем:
> "! Или, чукча - не читатель, чукча - писатель?

Этого я не понял, если имеете введу что я пишу с ошибками то это ктому что русскому языку нас неоченто учили, по этому я много допускаю ошибок сорри


ЮЮ   (2007-06-22 02:47:00) [3]

> Не издеваюсь
> а как его использовать? в далнейшем


Уверен, что не издеваешься? В [6] даже слово написано "Используем:"! Или, чукча - не читатель, чукча - писатель?


> но полностю не понял пример.

Зачем тогда "Если увас пример по ТриВю в котором исползуются данные из базы и получения значений из ТриВю или др. Если есть то сбрости на rustam@netman.ru."? У всех код написан теми же непонятными буквами :)


zz 5   (2007-06-21 20:41:00) [4]


> >>TObject(DMLibrary.dstUser.fieldbyname('ID').AsInteger)а
> как его использовать? в далнейшем


Например, так для выделенной ветки можно получить значение первичного ключа Integer(Tree.Selected.Data)


Xmen   (2007-06-21 14:33:00) [5]

>>TObject(DMLibrary.dstUser.fieldbyname('ID').AsInteger)
а как его использовать? в далнейшем


Xmen   (2007-06-21 14:31:00) [6]

не в моём запросе есть это.
Не издеваюсь просто я неразбираюсь в ТриВю код составил сам но из др примера но полностю не понял пример.


ЮЮ   (2007-06-21 11:52:00) [7]

[7] Xmen   (21.06.07 11:35)

Ты издеваещься или код не твой?

AddChildObject(
 Nodes,
 DMLibrary.dstUser.fieldbyname('fio').AsString,
 // разве это не фамилия, отображаемая визуально компонентом
 TObject(DMLibrary.dstUser.fieldbyname('ID').AsInteger)
 // разве это не Id, используемый в дальнейшем для точной, а не по фамилии, идентификации??
);


> А то у меня получается запрос по фамилию а там уменя однофамилсев
> много.

DMLibrary.dstKartochka.ParamByName('UserId').Value:= I nteger(Selected.Data);

И где здесь фамилия?


Xmen   (2007-06-21 11:35:00) [8]

Спасибо за совет ЮЮ.
А как можна чтобы хранит там 2 значения 1 как видити Фамилия а второй должен быт невидыми и должен хранит в себя ID поля в котором расположена эта  фамилия. Например
ID    Familiya
1     Иванов
2     Николаев
3     Чумаков
и в дереве отображался бы толь фамилия а когда сделан двойной клик по ТриВю чтобы на таблице вводился записи из базы по зопросу по ID. А то у меня получается запрос по фамилию а там уменя однофамилсев много.


ЮЮ   (2007-06-21 10:38:00) [9]

> :) А я прывик таким насмешкам, потомущто я признаю свою
> неопытность.

поэтому читаешь исключительно [2], игнорируя [1]?

new(PK);
PK^ := DMLibrary.dstUser.fieldbyname('ID').AsInteger;
AddChildObject( Nodes,DMLibrary.dstUser.fieldbyname('fio').AsString,PK);


Лишние манипуляции. Для хранений целого хватит и Data:

AddChildObject( Nodes,DMLibrary.dstUser.fieldbyname('fio').AsString, TObject(DMLibrary.dstUser.fieldbyname('ID').AsInteger ));

Используем:

DMLibrary.dstKartochka.Close;
DMLibrary.dstKartochka.ParamByName('UserId').Value:= Integer(Selected.Data);
DMLibrary.dstKartochka.Open;


Jeer   (2007-06-21 10:33:00) [10]


>Если есть то сбрости на rustam@netman.ru Спасибо за помощ.


Спасибо за предложение - стоить это тебе будет всего 3 тыс руб.


Xmen   (2007-06-21 10:23:00) [11]

:) А я прывик таким насмешкам, потомущто я признаю свою неопытность.
А тепер по вопросу Если увас пример по ТриВю в котором исползуются данные из базы и получения значений из ТриВю или др. Если есть то сбрости на rustam@netman.ru. Спасибо за помощ.


ЮЮ   (2007-06-21 10:12:00) [12]

> Ищу ошибки в логике программы

Найдещь, звони 234-56-78. Или сообщи в данной ветке.


Johnmen   (2007-06-21 10:05:00) [13]

Ищу ошибки в логике программы на Delphi. Качественно. Недорого.
тел. 123-45-67 спросить СуперДельфина


ЮЮ   (2007-06-21 09:43:00) [14]

>      SelectSQL.Add(' SELECT * FROM user_lib');
>      SelectSQL.Add(' WHERE familiya = '''+s+'''');

Это лищнее. Ты же его сохранил значение ключевого поля при построении дерева. Вот его и поставляй в
   DMLibrary.dstKartochka.ParamByName('UserId').Value:= ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо