powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / деревья в VB
10 сообщений из 10, страница 1 из 1
деревья в VB
    #33793138
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, подскажите пожалуйста как можно организовать вывод в VB данных из таблицы SQL Server в виде дерева. Нужно что бы дерево было построено по дате записи в таблицу, для чего в таблице предусмотрено поле с датой записи строки.
Возможно у кого то есть коды или примеры как это делаеся, пожалуйста помогите, я понимаю что надо отталкиваться от TreeView , но нет опыта. Очень буду благодарен и признателен.
...
Рейтинг: 0 / 0
деревья в VB
    #33793269
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
примерно так можно сделать выводя из одно таблицы данные в трв
как именно надо организовать структры представления?
Код: plaintext
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.
Dim rs As New ADODB.Recordset
Dim con As New ADODB.Connection
Dim ndx As MSComctlLib.Node
Dim i As Long
On Error GoTo er
con.Open "MS SQL connection"
TV.Nodes.Clear 'TV это тривью
With rs
.Open "select distinct(data_fild) from table", con, adOpenStatic ' запрос вывода основных веток
If .RecordCount >  0  Then
.MoveFirst
Do Until .EOF
   Set ndx = TV.Nodes.Add() ' добавляем основные ветки типа даты
        ndx.Text = .Fields("data_fild").Value
        ndx.Tag = "мама"
    .MoveNext
Loop
End If
.Close
.Open "select distinct(что_то_связаное_с_датой),data_fild from table", con, adOpenStatic 'запрос вывода дочерних веток
If .RecordCount >  0  Then
    For i =  1  To TV.Nodes.Count
    .MoveFirst
        Do Until .EOF
        If TV.Nodes(i).Text = .Fields("data_fild").Value Then 'песли даты в запросе и в дереве совпадают то вводится дочерняя ветка
          Set ndx = TV.Nodes.Add(i, tvwChild) ' добавляем дочерние ветки в папке с основной датой
           ndx.Text = .Fields("что_то_связаное_с_датой").Value
           ndx.Tag = "дочка"
        End If
        .MoveNext
        Loop
    Next i
    
End If
.Close

End With
con.Close
Set rs = Nothing
Set con = Nothing
Set ndx = Nothing

Exit Sub
er:
MsgBox Err.Description
con.Close
Set rs = Nothing
Set con = Nothing
Set ndx = Nothing
Exit Sub

PS
возможно не очень корректный код но отпишись по структуре чем смогу помогу
...
Рейтинг: 0 / 0
деревья в VB
    #33793315
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
структуры нужно организовать примерно вот так:
год 2006
январь
вариант1 26.01.06 12.30
вариант2 26.01.06 14.30
.
.
.

февраль



.
.
.
год 2007
.
.
...
Рейтинг: 0 / 0
деревья в VB
    #33793342
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какие данные у тебя в базе
есть отдельное поле год или месяц, что содержит поле вариант
...
Рейтинг: 0 / 0
деревья в VB
    #33793353
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TIKOкакие данные у тебя в базе
есть отдельное поле год или месяц, что содержит поле вариант
отпиши пример одной строки в базе с именами полей и занчениями
пример
дата вариант

12,02,03 1500
...
Рейтинг: 0 / 0
деревья в VB
    #33793366
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кладем на форму TreeView1 и...
Код: plaintext
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.
Option Explicit

Private Function treeviewHasItem(id As String) As Boolean
On Error GoTo Err_Exit
    Dim s As String
    s = TreeView1.Nodes(id)
    treeviewHasItem = True
    Exit Function
Err_Exit:
    treeviewHasItem = False
End Function

Private Sub Form_Load()

Dim fDate( 5 ) As Date
Dim fString( 5 ) As String
Dim i As Integer

fDate( 0 ) = "22.04.2001"
fDate( 1 ) = "01.08.2005"
fDate( 2 ) = "01.01.2006"
fDate( 3 ) = "15.01.2006"
fDate( 4 ) = "19.03.2006"
fDate( 5 ) = "22.04.2006"

fString( 0 ) = "Вариант 1"
fString( 1 ) = "Вариант 2"
fString( 2 ) = "Вариант 3"
fString( 3 ) = "Вариант 4"
fString( 4 ) = "Вариант 5"
fString( 5 ) = "Вариант 6"

For i = LBound(fDate) To UBound(fDate)
    TreeView1.Nodes.Add , , "D" & fDate(i), fString(i)
    TreeView1.Nodes(i +  1 ).Tag = "M" & Year(Mid(TreeView1.Nodes(i +  1 ).Key,  2 )) & "." & Month(Mid(TreeView1.Nodes(i +  1 ).Key,  2 ))
Next i

For i =  1  To TreeView1.Nodes.Count
    If Not treeviewHasItem("Y" & Year(Mid(TreeView1.Nodes(i).Key,  2 ))) Then
        TreeView1.Nodes.Add , , "Y" & Year(Mid(TreeView1.Nodes(i).Key,  2 )), Year(Mid(TreeView1.Nodes(i).Key,  2 ))
    End If
Next i

For i =  1  To TreeView1.Nodes.Count
    If Left(TreeView1.Nodes(i).Key,  1 ) = "D" Then
        If Not treeviewHasItem("M" & Year(Mid(TreeView1.Nodes(i).Key,  2 )) & "." & Month(Mid(TreeView1.Nodes(i).Key,  2 ))) Then
            TreeView1.Nodes.Add , , "M" & Year(Mid(TreeView1.Nodes(i).Key,  2 )) & "." & Month(Mid(TreeView1.Nodes(i).Key,  2 )), Month(Mid(TreeView1.Nodes(i).Key,  2 ))
            TreeView1.Nodes("M" & Year(Mid(TreeView1.Nodes(i).Key,  2 )) & "." & Month(Mid(TreeView1.Nodes(i).Key,  2 ))).Tag = "Y" & Year(Mid(TreeView1.Nodes(i).Key,  2 ))
        End If
    End If
Next i

For i = TreeView1.Nodes.Count To  1  Step - 1 
    If TreeView1.Nodes(i).Tag <> "" Then
        Set TreeView1.Nodes(i).Parent = TreeView1.Nodes(TreeView1.Nodes(i).Tag)
    End If
Next i

End Sub
только остается переделать под использование с рекордсетом а не массивом
...
Рейтинг: 0 / 0
деревья в VB
    #33793422
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ID(primary key) Name Data Date (дата и время создания записи)

int nvarchar image datetime

Примет:

34 global.doc DB5FC0 15.06.2006 16.00
...
Рейтинг: 0 / 0
деревья в VB
    #33793431
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
farboxID(primary key) Name Data Date (дата и время создания записи)

int nvarchar image datetime

Примет:

34 global.doc DB5FC0 15.06.2006 16.00


т.е
Data
=====Name
Data
=====Name
?
...
Рейтинг: 0 / 0
деревья в VB
    #33793456
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть идут - уникальный ID, имя загруженного файла, сам загруженный файл, дата и время его загрузки.
вот.
...
Рейтинг: 0 / 0
деревья в VB
    #33793503
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
With rs
.Open "select distinct(data) from table", con, adOpenStatic ' 
If .RecordCount >  0  Then
.MoveFirst
Do Until .EOF
   Set ndx = TV.Nodes.Add() 
        ndx.Text = .Fields("data").Value
        ndx.Tag = "ìàìà"
    .MoveNext
Loop
End If
.Close
.Open "select distinct(name),data from table", con, adOpenStatic 
If .RecordCount >  0  Then
    For i =  1  To TV.Nodes.Count
    .MoveFirst
        Do Until .EOF
        If TV.Nodes(i).Text = .Fields("data").Value Then 
          Set ndx = TV.Nodes.Add(i, tvwChild) 
           ndx.Text = .Fields("name").Value
           ndx.Tag = "äî÷êà"
        End If
        .MoveNext
        Loop
    Next i
    
End If
.Close

End With

это код даст тебе структуры в тр
Дата
========Имя
========Имя
Дата
========Имя
========Имя


для разделения на годы и на месяцы придется использовать дополнительные функции, и ветки буду глубже чем просто через запрос
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / деревья в VB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]