• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Связывание Treeview и Listview совместно с Access

  • Автор темы evgen
  • Дата начала
E

evgen

Здравствуйте! Пишу программу, по крайней мере, пытаюсь ее писать, но очень много трудностей возникает, надеюсь на вашу помощь.
На форме есть TreeView и ListView, также ADOConnection и ADOQuery. и таблица Access: (см. рисунок)
link removed
TreeView заполнен таким образом: (см. рисунок)
link removed
С помощью ADOQuery я вывожу строки из таблицы в ListView: (см. код)
Код:
procedure TForm1.LoadTasks;
var
res, id_par, id_bab: string;
begin
TasksLV.Items.BeginUpdate;
TasksLV.Items.Clear;
case TreeView1.Selected.Parent.Index of
-1: id_par := 'where ID_parent = 0';
0: id_par := 'where ID_parent = 0';
1: id_par := 'where ID_parent = 1';
2: id_par := 'where ID_parent = 2';
end;
case TreeView1.Selected.Index of
0: id_bab := 'ID_baby = 0';
1: id_bab := 'ID_baby = 1';
2: id_bab := 'ID_baby = 2';
end;
ADOQuery1.SQL.Text := 'select * from task ' + id_par + ' and ' + id_bab;
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
with TasksLV.Items.Add do
begin
Data := Pointer(ADOQuery1.FieldByName('ID').AsInteger);
Caption := ADOQuery1.FieldByName('title').AsString;
SubItems.Add(ADOQuery1.FieldByName('description').AsString);
SubItems.Add(ADOQuery1.FieldByName('ID_parent').AsString);
SubItems.Add(ADOQuery1.FieldByName('ID_baby').AsString);
//SubItems.Add(ADOQuery1.FieldByName('run').AsString);
if ADOQuery1.FieldByName('run').AsInteger = 0 then res := 'Нет'
else res := 'Да';
SubItems.Add(res);
end;
ADOQuery1.Next;
end;
TasksLV.Items.EndUpdate;
end;
на событие изменения TreeView я поставил загрузку этой процедуры LoadTasks:
Код:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
LoadTasks;
end;
Но при компиляции программы, и на событие OnChange - TreeView, показ итемов в ListView происходит неправильно, как задумано. Помогите найти правильный ход решения моей задумки, и исправить ее.
Также выкладываю исходник своей программы.
Посмотреть вложение ListView.rar
Заранее благодарю!
 
E

etc

1) Переписать, викинув ADOQuery1
2) Переписать с использованием параметризированных запросов
потом опять сюда ...
 
B

BurcevD

Вы не могли бы написать что именно вам нужно сделать, и зачем вам два поля, родитель и ребенок, если можно обойтись одним, как я понял Вам необходимо при выборе из дерева, показать задания, принадлежавшие выбранному. Или как!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!