Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

TreeView и данные из таблицы   Найти похожие ветки 

 
Xmen   (2007-06-21 09:16) [0]

У меня такой вопрос я в своей проге исползую 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;
Знаю что мои коды неидиалные, могут быт гдето ошибки. Если я чтото пропустил при написания вопроса то можете спросить могу дать уточнения.


 
ЮЮ ©   (2007-06-21 09:43) [1]

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

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


 
Johnmen ©   (2007-06-21 10:05) [2]

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


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

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

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


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

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


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


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


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


 
ЮЮ ©   (2007-06-21 10:38) [6]

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

поэтому читаешь исключительно [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;


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

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


 
ЮЮ ©   (2007-06-21 11:52) [8]

[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:= Integer(Selected.Data);

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


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

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


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

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


 
zz 5 ©   (2007-06-21 20:41) [11]


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


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


 
ЮЮ ©   (2007-06-22 02:47) [12]

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


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


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

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


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


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

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

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

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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
2-1191582205
pyJIoH
2007-10-05 15:03
2007.10.28
digital signature, dll


15-1191529240
TwentyTwo
2007-10-05 00:20
2007.10.28
Задать вопрос, который юридически невозможно закрыть даже методом


2-1191694497
hinst
2007-10-06 22:14
2007.10.28
API


15-1190875428
snake-as
2007-09-27 10:43
2007.10.28
Помогите создать удобный интерфейс


15-1190978114
infom
2007-09-28 15:15
2007.10.28
Странное поведение BDS 2006