723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
|
30.11.2013, 18:54
|
2
|
Сообщение было отмечено Junior Joe как решение
Решение
Из своего показываю, может разберешся
Процедура добавления
Delphi | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| procedure InTreeView(NameTermin: string);
var
i, c: integer;
S, Str: string;
TreeNode, TreeNode2: TTreeNode;//из модуля ComCtrls
begin
//Начальные значения переменных
S:='';
c:=1;
TreeNode2:=nil;
DataModule2.ADOQuery2.RecNo:=1;
//Добавляем корень дерева и кол-во в нем документов
TreeNode:=form6.TreeView1.Items.AddChild(nil, NameTermin+': '+ListCountDoc.Values[NameTermin]+' док');
//Добавление первого документа при старте
if SDoc='' then
begin
SDoc:=DataModule2.ADOQuery2.FieldByName('IDoc').AsString;
TreeNode2:=form6.TreeView1.Items.AddChild(TreeNode, 'Док №'+inttostr(c));
end;
//Цикл добавления документов
for i:=1 to DataModule2.ADOQuery2.RecordCount do
begin
DataModule2.ADOQuery2.RecNo:=i;
SIDoc:=DataModule2.ADOQuery2.FieldByName('IDoc').AsString;
StrGridCol:=strtoint(ListPosCol.Values[DataModule2.ADOQuery2.FieldByName('Метка').AsString]);
//Если SDoc<>SIDoc добавляем новый документ
if SDoc<>SIDoc then
begin
SDoc:=SIDoc;
S:=DataModule2.ADOQuery2.FieldByName('Термин').AsString;
Str:=S+': '+ListCountDoc.Values[S]+' док';
//Добавление нового документа и его порядкового номера в дереве
TreeNode2:=form6.TreeView1.Items.AddChild(TreeNode, 'Док №'+inttostr(c));
//Если Термин не являеться корнем дерева, то добавляем его в документ
if S<>NameTermin then
form6.TreeView1.Items.AddChild(TreeNode2, Str+' ('+ListMetkaName.Names[StrGridCol]+')')
//Иначе пропускаем, и увеличиваем счетчик номера документа
else
inc(c);
end
//Иначе записываем в текущий
else
begin
S:=DataModule2.ADOQuery2.FieldByName('Термин').AsString;
Str:=S+': '+ListCountDoc.Values[S]+' док';
//Если Термин не являеться корнем дерева, то добавляем его в документ
if S<>NameTermin then
form6.TreeView1.Items.AddChild(TreeNode2, Str+' ('+ListMetkaName.Names[StrGridCol]+')')
//Иначе пропускаем, и увеличиваем счетчик номера документа
else
inc(c);
end;
end;
end; |
|
запрос и процедура добавления в нутри
Delphi | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| //Показывает запрос
procedure ShowQuery(Metka, Termin: string);
var
S: string;
i: integer;
begin
//Дерево
if form3.CheckBox1.Checked then
form6.Show
//Иначе таблица
else
form4.Show;
DataModule2.ADOQuery2.Filter:='';
//Получение всех нужных IDoc
S:=GetIDoc(Metka, Termin);
//Получаем список отобранных терминов в ListTerminName
GetListTerminName(Termin, Metka, S);
//Установка начальных значений переменных
SDoc:='';
StrGridCol:=0;
StrGridRow:=1;
form4.StringGrid1.RowCount:=StrGridRow+1;
form4.StringGrid1.Rows[StrGridRow].Clear;
form6.TreeView1.Items.Clear;
//Цикл получения конечных данных
for i:=0 to ListTerminName.Count-1 do
begin
//Получение нужных IDoc по термину
S:=GetIDoc(Metka, ListTerminName[i]);
//Получаем количество документов в ListCountDoc
GetListCountDoc(ListTerminName[i], Metka, S);
//Делаем конечный запрос
DataModule2.ADOQuery2.SQL.Clear;
DataModule2.ADOQuery2.SQL.Add(format('SELECT Термин, Метка, IDoc FROM Тавторы WHERE (Метка="%s" AND Термин LIKE "%s") OR IDoc IN (%s) ORDER BY IDoc', [Metka, ListTerminName[i], S]));
DataModule2.ADOQuery2.ExecSQL;
DataModule2.ADOQuery2.Open;
//Если true то заполняем TreeView
if form3.CheckBox1.Checked then
InTreeView(ListTerminName[i])
//Иначе заполняем StringGrid
else
InGreed;
end;
form4.Caption:='Записей - '+inttostr(DataModule2.ADOQuery2.RecordCount);
end; |
|
1
|