Access
 sql >> Baza danych >  >> RDS >> Access

Kontrolka widoku drzewa Zaznacz opcję Dodaj usuń węzły

Wprowadzenie.

W tym odcinku samouczka kontroli widoku drzewa dowiemy się, jak dodawać/usuwać Węzły. Pozycja elementu kandydata Dodaj/Usuń będzie zaznaczona, gdzie chcemy Dodaj() nowy węzeł lub Usuń() zaznaczony węzeł. Dodanie węzła może być na tym samym poziomie co zaznaczony węzeł lub jako węzeł podrzędny.

Dotychczasowe sesje samouczka sterowania TreeView.

  1. Samouczek sterowania Microsoft TreeView
  2. Tworzenie menu dostępu za pomocą TreeView Control
  3. Przypisywanie obrazów do kontrolki TreeView
  4. Przypisywanie obrazów do TreeView Control-2

Widok normalny kontrolki widoku drzewa demonstracyjnego w formularzu MS-Access wraz z innymi kontrolkami jest podany poniżej.

Tabela danych dla demonstracji TreeView Control.

Tabela o nazwie Przykład, wykorzystaliśmy w pierwszej sesji samouczka, wykorzystamy również tutaj. Jest to mała tabela z rekordami bazy danych dostępu, tabeli, struktury formantów formularzy i raportów, ułożonych w porządku hierarchicznym i łatwych do zrozumienia.

Identyfikator kolumna (Widok drzewa Klucz ) to pole Autonumerowanie.

Nowi użytkownicy zostaną zaktualizowani w tej sesji samouczków.

Jeśli nie przeszedłeś przez pierwszą sesję samouczka, możesz pobrać bazę danych demonstracyjnych z drugiej strony sesji:Tworzenie menu dostępu z kontrolą widoku drzewa. W tej bazie danych znajduje się tabela o nazwie:Próbka i formularz frmSample . Możesz je zaimportować do swojej aktualnej bazy danych. Istnieje inny formularz o nazwie frmMenu tam i możesz skopiować przyciski poleceń Rozwiń wszystko, Zwiń wszystko, i ich przycisk poleceń Kliknij Procedury zdarzeń z frmMenu do frmSample Moduł kodu do kontynuowania tej sesji.

Jak wspomniałem wcześniej, możemy udostępnić kontrolkę ImageList z przesłanymi obrazami do innych projektów, utworzymy kopię kontrolki ImageList z ostatniej sesji samouczka i przyniesiemy ją tutaj, wraz ze wszystkimi przesłanymi obrazami, i użyjemy jej na Węzły kontrolne widoku drzewa na frmSample .

Importowanie kontrolki ImageList z obrazami.

Możesz wprowadzić kontrolkę ImageList, którą już masz, z przesłanymi obrazami do innej bazy danych, w następujący sposób:

  1. Zaimportuj formularz z kontrolką ImageList do aktywnej bazy danych z bazy danych, w której masz kontrolkę ImageList z ręcznie załadowanymi obrazami. Skopiuj i wklej kontrolkę ImageList do formularza tam, gdzie chcesz.

  2. Lub najpierw skopiuj kontrolkę ImageList do schowka z bazy danych, gdzie ją masz. Jeśli pobrałeś bazę danych demonstracyjnych z wcześniejszej sesji samouczka, to masz już kontrolkę ImageList z załadowanymi obrazami. Zamknij bazę danych po skopiowaniu kontrolki ImageList do schowka.

  3. Otwórz docelową bazę danych i otwórz formularz, w którym chcesz umieścić kontrolkę ImageList i wklej ją w formularzu.

    Z następującymi liniami kodu w CreateTreeView() Pod-procedura możesz przekazać odniesienie do obiektu ImageList do kontrolki widoku drzewa.

    Przyciemnij telewizor jako MSComctlLib.TreeViewDim ImgList jako MSComctlLib.ImageListSet telewizor =Me.TreeView0 .Objecttv.Nodes.ClearSet ImgList =Ja.ImageList0 .Objecttv.ImageList =Lista obrazów 

Zmień podświetlone nazwy obiektów w kodzie, jeśli są różne w formularzu.

Następnie możesz dodać nazwy kluczy obrazu do TreeView Nodes.Add() ostatnie dwa parametry metody.

Te ćwiczenia wykonaliśmy już na wcześniejszych sesjach. Aby przypomnieć, że używamy Kontroli widoku tabeli i drzewa, którą stworzyliśmy w pierwszej sesji samouczka i zaimplementowaliśmy z wyżej wyjaśnionymi zmianami.

Wyświetlanie wartości właściwości węzłów z zaznaczeniem.

Wybrany Klucz węzła , Klucz rodzica, i Tekst Właściwości są wyświetlane w polach tekstowych po prawej stronie kontrolki widoku drzewa. Pole wyboru z podpisem:Węzeł podrzędny, Usuń Węzeł, i Dodaj węzeł Przyciski poleceń to nowe dodatki do formularza. Ich funkcje zostaną wkrótce wyjaśnione.

Wyświetlanie pól wyboru w kontrolce TreeView.

Zwykle pole wyboru nie jest wyświetlane w kontrolce TreeView, chyba że włączymy właściwość w arkuszu właściwości kontrolki TreeView. Ma tutaj tylko ograniczoną funkcjonalność. Cokolwiek zamierzamy tutaj zrobić, można to zrobić również bez pola wyboru.

Lepszym podejściem do wykorzystania CheckBoxów może być przygotowanie Raportu o wybranych lokalizacjach oddziałów Spółki, w oparciu o wybierane przez użytkownika losowe wybory oddziałów, z Menu Projektu Dostępu.

Tutaj celem jest uświadomienie sobie tej funkcji i uruchomienie demonstracji jej użycia.

  1. Otwórz formularz za pomocą kontrolki TreeView w widoku projektu.
  2. Kliknij prawym przyciskiem myszy kontrolkę TreeView, podświetl Obiekt TreeCtrl , wybierz Właściwości opcję wyświetlenia arkusza właściwości.
  3. Umieść znacznik wyboru na polach wyboru opcja w Kontroli właściwości, jak pokazano na obrazku podanym poniżej.

Obraz demonstracyjny TreeView podany na górze, Szczegóły.

Zobaczmy, co mamy w formularzu demonstracyjnym frmSample przedstawione na górze tej strony. Kontrolka widoku drzewa i dwa górne przyciski poleceń, Rozwiń wszystko i Zwiń wszystko, po kliknięciu rozwija lub zwija węzły i widzieliśmy ich funkcje w ostatnim odcinku.

Po prawej stronie znajdują się trzy pola tekstowe, pod nagłówkiem Etykieta:Wartości właściwości , do wyświetlania klucza węzła z zaznaczonym polem wyboru , Klucz rodzica, i Tekst Wartości.

Usunięcie węzła Przycisk polecenia usuwa zaznaczony węzeł lub węzeł i jego węzły podrzędne.

Przed wybraniem przycisku polecenia dodawania węzła , Tekst Należy edytować wartość właściwości, aby zastąpić ją nową wartością tekstową dla nowego węzła.

Nad Dodaj węzeł Przycisk polecenia, znajduje się Pole wyboru z etykietą Węzeł podrzędny. Dodaj węzeł i węzeł podrzędny Pole wyboru współpracuje ze sobą, aby ustawić regułę, w której powinien pojawić się nowy węzeł.

Zrozumienie działania Dodaj węzeł.

Załóżmy, że chcesz dodać nowy węzeł dla Hiperłącza pole pod Polami typ danych grupy (lub węzła nadrzędnego) Lista. Spójrz na obraz demonstracyjny u góry tej strony, na którym zaznaczyłem Pole daty Node, między innymi Child-Nodes. Arkusze właściwości po prawej stronie pokazują klucz:X15 , klucz nadrzędny:X4 &Tekst:Pole daty Opis.

Zmień tekst:Pole daty do hiperłącza w polu tekstowym wyświetlania właściwości i kliknij Dodaj węzeł Przycisk polecenia. Wynik będzie taki, jak pokazano poniżej:

Jeśli zaznaczysz Pola element węzła nadrzędnego i umieść znacznik wyboru w węźle podrzędnym opcja nad Dodaj węzeł Przycisk polecenia, uzyskasz ten sam wynik.

Zamiast tego, jeśli utrzymasz znacznik wyboru węzła w polu daty i ustaw znacznik wyboru na węźle podrzędnym opcja nad Dodaj węzeł Przycisk polecenia, otrzymasz wynik, jak pokazano poniżej.

Węzeł podrzędny zostanie utworzony pod węzłem zaznaczonym.

Akcje Dodaj węzeł muszą najpierw utworzyć nowy rekord w tabeli źródłowej.

W Próbce tworzony jest nowy rekord Tabela z nowym tekstem:Hiperlink i Identyfikator rodzica Wartości. Pole Autonumerowanie generuje nowy numer, a my go pobieramy i używamy jako klucz-wartość dla węzła.

Kod podprogramu VBA Add Node jest podany poniżej:

Private Sub cmdAdd_Click()Dim strKey jako StringDim lngKey jako LongDim strParentKey jako StringDim lngParentkey jako LongDim strText jako StringDim lngID jako LongDim strIDKey jako StringDim flaga podrzędna jako IntegerDim db jako DAO.DatabaseDim strSql.No StringDim As Indimd As Integeri =0For Each tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True i =i + 1 End IfNext i> 1 Then MsgBox "Selected Nodes:" &i &vbCr &"Wybierz tylko jeden węzeł do zaznaczenia Addition .", vbCritical, "cmdAdd()" Zakończ SubEnd If'Read Wartości właściwości z FormstrKey =Trim(Me![TxtKey])lngKey =Val(Mid(strKey, 2))strParentKey =Trim(Me![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Mid(strParentKey, 2)), 0)strText =Trim(Me![Text])'Odczytaj opcję węzła podrzędnego settingchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "Jeśli lngParentkey =0 And childflag =0 Then 'Add Root-level Node, ParentKey i s Puste strSql =strSql &"SELECT '" &strText &"' AS [Opis], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Then 'Wstawia węzeł podrzędny do węzła z zaznaczeniem, tutaj Wartość klucza używana jako klucz nadrzędny strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Then 'Wstawia węzeł na poziomie zaznaczonym, Dodaj element pod tym samym kluczem nadrzędnym strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Get nowo utworzony autonumer do użycia jako KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Add Root- poziom Węzeł, ParentKey jest pusty tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Przypadek 2 'Wstawia węzeł podrzędny do węzła z zaznaczeniem, tutaj Wartość klucza używana jako ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Przypadek 3 'Wstawia węzeł na poziomie zaznaczonym, Dodaj element pod tym samym ParentKey tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Wymaż wartości właściwości z formularza ze mną .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:CreateTreeViewEnd_Cmd>Cmd> 

Przyjrzyjmy się kodowi VBA. Po lokalnych deklaracjach zmiennych, węzły TreeView są skanowane w poszukiwaniu znaczników wyboru i pobierają liczbę zaznaczonych elementów. Jeśli zaznaczonych węzłów jest więcej niż jeden, wyświetla komunikat i przerywa program.

Uwaga: Zamiast zaznaczania możemy bezpośrednio kliknąć węzeł, aby go zaznaczyć. W obu przypadkach zaznaczony/kliknięty węzeł jest przekazywany jako parametr do procedury zdarzenia. Zaznaczanie jest dobre, gdy trzeba wybrać więcej niż jedną pozycję z menu projektu, na przykład:wybór innego zestawu danych dla konkretnego raportu itp.

Wartości właściwości zaznaczonego węzła są odczytywane z kontrolek formularza do strKey , strParentKey, i strText. Wartości numeryczne ID i ParentID są wyodrębniane i zapisywane w lngKey i lngParentKey Zmienne do użycia w ciągu SQL.

Następnie węzeł podrzędny Wartość pola wyboru jest zapisywana w ChildFlag Zmienna.

Tworzone są trzy różne zestawy ciągów SQL w oparciu o wybrany węzeł i węzeł podrzędny Zaznacz opcję pola nad przyciskiem polecenia Dodaj węzeł.

  1. Jeśli Identyfikator rodzica Wartość właściwości w formularzu jest pusta, a węzeł podrzędny pole wyboru nie jest zaznaczone, zostanie utworzony nowy rekord poziomu głównego, ponieważ użytkownik zaznaczył węzeł poziomu głównego.
  2. Jeśli Identyfikator rodzica Wartość właściwości>=0 i węzeł podrzędny pole wyboru jest zaznaczone (zaznaczone ), a następnie tworzony jest nowy rekord jako węzeł podrzędny do węzła z zaznaczeniem. Klucz węzła z zaznaczonym polem wyboru (ID) jest używany jako ParentID w nowym rekordzie dla nowego węzła.
  3. Jeśli Identyfikator rodzica Wartość >=0 i węzeł podrzędny opcja pola wyboru nie jest zaznaczona (niezaznaczona ), następnie nowy rekord jest tworzony dla nowego węzła, na tym samym poziomie co węzeł z zaznaczeniem.

intFlag Zmienna jest ustawiona na jedną z trzech wartości:1,2 lub 3, w zależności od wykonania SQL, jako wskazanie typu węzła do utworzenia w Kontrolce widoku drzewa.

Następnie, w oparciu o wybór opcji, wykonywany jest kod SQL w celu utworzenia nowego rekordu w próbce Tabela z nową wartością pola identyfikatora Autonumerowania.

Następnie DMax() Funkcja zwraca unikalny identyfikator rekordu jako klucz-wartość dla nowego węzła.

W oparciu o opcję typu węzła (1,2 lub 3) węzeł jest tworzony w kontrolce widoku drzewa.

Zawartość pola tekstowego wyświetlania właściwości zostanie wyczyszczona.


Usuwanie węzła lub węzła z elementami podrzędnymi.

Usuń węzeł Opcja jest znacznie łatwiejsza niż wcześniejsze ćwiczenie. Po prostu usuwa zaznaczony węzeł i jego elementy podrzędne, jeśli są obecne, z kontrolki widoku drzewa. Powiązane rekordy są również usuwane z tabeli.

Kod VBA do usuwania węzłów jest podany poniżej:

Private Sub cmdDelete_Click()Dim nodId As Long, nodParent As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strKey As StringDim strMsg As Stringj =ed Nie 'Get check-For tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Wybrane węzły:" &j &vbCr &"Wybierz tylko jeden węzeł do usunięcia." , vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'sprawdź obecność węzłów podrzędnych oznaczonego NodeIf tmpnode.Children> 0 Then' Ostrzeżenia:'Usuwanie węzłów losowo pozostawi osierocone węzły' w tabeli i zakończy się błędami, podczas następnego procesu ładowania widoku drzewa strMsg ="Oznaczony węzeł ma " &tmpnode.Children &" Children " &vbCr &"Usuń Węzły potomne też?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then 'Sprawdź dwukrotnie i uzyskaj potwierdzenie. strMsg ="Usuń tylko najgłębszy zestaw węzłów podrzędnych" &vbCr strMsg =strMsg &"i ich węzeł nadrzędny jednocześnie." &vbCr &vbCr strMsg =strMsg &"Czy na pewno chcesz kontynuować...?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes To rób aż do tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Usuń węzeł podrzędny tv.Nodes.Remove tmpnode .Child.Index 'Usuń powiązany rekord strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Koniec podrzędu zakończenia If Else Koniec podrzędu IfEnd If nodId =Val(Mid(tmpnode.Key, 2)) 'Usuń nadrzędny tv.Nodes.Remove tmpnode.Key tv.Refresh 'Usuń zaznaczony rekord strSql =" DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Wymaż wartości właściwości z formularza ze mną .TxtKey ="" .TxtParent ="" .Text ="" End With Set db =Nic End Sub

Po lokalnych deklaracjach zmiennych For Each . . . Dalej Pętla liczy Nodes ze znacznikami wyboru. Jeśli zostanie znalezionych więcej niż jeden element zaznaczony, zostanie wyświetlony komunikat i program zostanie przerwany.

Jeśli zaznaczony jest tylko jeden element, w drugim kroku Sprawdzanie walidacji sprawdza obecność węzłów podrzędnych wybranego węzła. Jeśli zostaną znalezione węzły podrzędne, zostanie wyświetlony komunikat o tym efekcie. Użytkownik musi ponownie potwierdzić zamiar kontynuowania usuwania najpierw węzłów podrzędnych, a następnie węzła nadrzędnego z zaznaczeniem.

Uwaga: Zaleca się, aby użytkownicy najpierw usunęli najgłębszy poziom węzłów podrzędnych lub wszystkie węzły podrzędne najgłębszego poziomu z ich bezpośrednim węzłem nadrzędnym, zaznaczając tylko węzeł nadrzędny, a nie węzeł nadrzędny. Ograniczenie reguły usuwania na tym poziomie sprawi, że Kodeks będzie prosty i łatwy do zrozumienia. Naruszenie tej zasady może pozostawić niektóre węzły osierocone i zakończyć się błędami, gdy widok drzewa otworzy się następnym razem .

Węzły podrzędne są usuwane jeden po drugim, a odpowiednie rekordy w tabeli są również usuwane, jeden po drugim. Następnie usuwa zaznaczony rekord nadrzędny.

Jeśli zaznaczony węzeł nie ma żadnych węzłów podrzędnych, jest usuwany natychmiast po sprawdzeniu poprawności, a odpowiedni rekord tabeli jest również usuwany.

Zawartość pola tekstowego wyświetlania właściwości w formularzu zostanie wyczyszczona.


Kod VBA modułu frmSample kompletnej klasy.

Poniżej znajduje się pełny kod VBA w frmSample 's Class Module, z innymi małymi podprogramami do rozwijania zwijanych węzłów, TreeView0_NodeCheck Procedura zdarzenia, cmdExit Zdarzenie kliknięcia przycisku polecenia, Form_Load() Procedury i CreateTreeView() Podprogram:

Opcja Porównaj DatabaseOption ExplicitDim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListConst KeyPrfx As String ="X"Private Sub cmdAdd_Click()Dim strKey As StringDim lngKey As LongDim strParentKey As StringDim lngParentIDStrKey As LongDim As LongDim StringDim childflag As IntegerDim db As DAO.DatabaseDim strSql As StringDim intflag As IntegerDim tmpnode As MSComctlLib.NodeDim i As Integeri =0For Each tmpnode In tv.Nodes If tmpnode.Checked Then i =1 True iNext =If tmpnode =End> 1 Następnie MsgBox "Wybrane węzły:" &i &vbCr &"Wybierz tylko jeden węzeł do oznaczenia dodatku.", vbCritical, "cmdAdd()" Exit SubEnd If'Read Wartości właściwości z FormstrKey =Trim(Me![TxtKey])lngKey =Val(Mid(strKey, 2))strParentKey =Trim(Me![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Mid(strParentKey, 2)), 0)strText =Trim(Me![ Text])'Odczytaj ustawienie opcji węzła podrzędnegochildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="WSTAW DO próbki ([Desc], [ParentID] ) "Jeśli lngParentkey =0 And childflag =0 Następnie 'Dodaj węzeł na poziomie głównym, ParentKey jest pusty strSql =strSql &"SELECT '" &strText &"' AS [ Opis], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Then 'Wstawia węzeł podrzędny do węzła z zaznaczeniem, tutaj Wartość klucza używana jako klucz nadrzędny strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Then 'Wstawia węzeł na poziomie zaznaczonym, Dodaj element pod tym samym kluczem nadrzędnym strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Get nowo utworzony autonumer do użycia jako KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Add Root- poziom Węzeł, ParentKey jest pusty tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Przypadek 2 'Wstawia węzeł podrzędny do węzła z zaznaczeniem, tutaj Wartość klucza używana jako ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Przypadek 3 'Wstawia węzeł na poziomie zaznaczonym, Dodaj element pod tym samym ParentKey tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Wymaż wartości właściwości z formularza ze mną .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:CreateTreeViewD_Resume cmdrivate Click() DoCmd.CloseEnd SubPrivate Sub cmdDelete_Click()Dim nodId As Long, nodParent As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strKey As StringDim =znak kontrolny 0sg As Nie Pobierz count Każdy tmpnode w tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Wybrane węzły:" &j &vbCr &"Wybierz tylko jeden węzeł do Delete.", vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'sprawdź obecność węzłów podrzędnych zaznaczonego NodeIf tmpnode.Children> 0 Then'Warnings:' Usuwanie losowych węzłów spowoduje pozostawienie osieroconych węzłów' w tabeli i zakończy się błędami podczas następnego procesu ładowania widoku drzewa strMsg ="Oznaczony węzeł ma " &tmpnode.Children &" Dzieci. " &vbCr &"Usunąć również węzły podrzędne?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then 'Dokładnie sprawdź i uzyskaj potwierdzenie. strMsg ="Usuń tylko najgłębszy zestaw węzłów podrzędnych" &vbCr strMsg =strMsg &"i ich węzeł nadrzędny jednocześnie." &vbCr &vbCr strMsg =strMsg &"Czy na pewno chcesz kontynuować...?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Następnie wykonaj dopóki tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Usuń węzeł podrzędny tv.Nodes.Remove tmpnode.Child.Index 'Usuń powiązany rekord strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Zakończ Sub End If Else Zakończ Sub End IfEnd If nodId =Val(Mid(tmpnode.Key, 2 )) 'Usuń nadrzędny tv.Nodes.Remove tmpnode.Key tv.Refresh 'Usuń zaznaczony rekord d strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Wymaż wartości właściwości z formularza With Me .TxtKey ="" . TxtParent ="" .Text ="" Koniec z zestawem db =Nic Koniec SubPrivate Sub cmdExpand_Click()Dim nodExp As MSComctlLib.Node Dla każdego węzła w tv.Nodes nodExp.Expanded =True NextEnd SubPrivate Sub cmdCollapse_Click().Dim nodExp As Węzeł dla każdego węzła Exp w tv.Nodes nodExp.Expanded =False NextEnd SubPrivate Sub Form_Load() CreateTreeView cmdExpand_ClickEnd SubPrivate Sub CreateTreeView()Dim db As DatabaseDim rst As RecordsetDim nodKey As StringDim ParentKey As0.StringDim strST As StringDimreT As .Objecttv.Nodes.Clear'Pass ImageList odniesienie do obiektu TreeView ImageList Property.Set ImgList =Me.ImageList0.Objecttv.ImageList =ImgListstrSql ="WYBIERZ ID, Desc, ParentID FROM Sample;"Set db =CurrentDbSet rst =db.OpenRecordset("sample", dbOpenTable)Nie rób, podczas gdy nie rst.EOF i nie rst.BOF If Nz(rst!ParentID, "") ="" Wtedy nodKey =KeyPrfx &CStr(rst!ID) strText =rst!desc tv.Nodes.Add , , nodKey, strText, "folder_close", "folder_open" Else ParentKey =KeyPrfx &CStr(rst!ParentID) nodKey =KeyPrfx &CStr( rst!ID) strText =rst!desc tv.Nodes.Add ParentKey, tvwChild, nodKey, strText, "left_arrow", "right_arrow" End Ifrst.MoveNextLooprst.CloseOn Błąd GoTo 0Set rst =NothingSet db =NothingEnd SubPrivate Sub TreeView0_NodeCheck(ByV As Object)Dim xnode As MSComctlLib.NodeSet xnode =Węzeł If xnode.Checked Then xnode.Selected =True With Me .TxtKey =xnode.Key If xnode.Text =xnode.FullPath Then .TxtParent ="" Else .TxtParent =xnode. Parent.Key End If .Text =xnode.Text End With Else xnode.Selected =False With Me .TxtKey ="" .TxtParent ="" .Text ="" Koniec End IfEnd Sub

Widok projektu formularza frmSample znajduje się poniżej:

Twoje obserwacje, komentarze, sugestie są mile widziane.

Demo bazy danych jest dołączone do pobrania.


OBIEKT SŁOWNIKA

  1. Podstawy obiektów słownikowych
  2. Podstawy obiektów słownika-2
  3. Sortowanie kluczy obiektów i elementów słownika
  4. Wyświetl rekordy ze słownika
  5. Dodaj obiekty klasy jako elementy słownika
  6. Aktualizuj element słownika obiektów klas


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć tabelę z bazą danych zaplecza w programie Access 2016

  2. Wstaw CreatedBy i CreatedOn w dowolnych brakujących tabelach danych w SQL

  3. Budowanie bazy danych Microsoft Access

  4. Dlaczego klucze podstawowe są ważne i jak je wybrać?

  5. Jak poruszać się po otwierającym obszarze roboczym programu Access 2019