Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Kolekcja kolekcji...
Mroowek




Typ: neutral
Postów: 51
Zarejestrowany: Feb 2005
Kolekcja kolekcji...

Potrzebna mi taka zmienna, ktora bedzie gromadzila takie dane:

Kierunek as string
Semestr as collection
Grupa as Collection

Myk jest taki, że Kierunek ma zawierac kolekcje Semestrow, a kazdy Semestr w Kierunku ma miec kolekcje Grup.

Probowalem to zrobic juz jako typ i jako klase, ale moje próby po calym dniu błądzenia spełzły na pogłębieniu sie mojej depresji...

Jesli ktos wie o co mi chodzi to prosze o szybka pomoc.
Pozdrawiam.

20-03-2005 23:15
Pokaż profil Mroowek  Wyślij email do Mroowek        4892300
Mroowek




Typ: neutral
Postów: 51
Zarejestrowany: Feb 2005
Metodą nowego typu:


Public Type tySemestry
    NazwaSem As String
    tabGr() As String
End Type
Public Type tyKierunek
    Nazwa As String
    tabSem() As tySemestry
End Type


No i to mi działa. Moge sobie zrobic tablice załózmy:

public function bzzz()
  dim tabKier() as tyKierunek
 
  'tu wypelniam tablice i dopóki nie chce wyciagnac
  'tej tablicy na zewnątrz jak ponizej to wszystko
  'dziala.
  'kiedy chce na koniec przypisac to tak to mam blad:
  bzzz = tabKier()
end function


Z powyższej funkcji wywala mi:
Compile Error:
Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types


I nie moge tego rozwiazac...
Zakrecone jak świński ogonek.

22-03-2005 00:06
Pokaż profil Mroowek  Wyślij email do Mroowek        4892300
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

A gdzie umieściłeś deklarację Twoich typów?

Z tego komunikatu rozumiem tyle, że tylko zdefiniowane w publicznym module procedury mogą pobierać jako parametry lub zwracać typy zdefiniowane przez użytkownika.

Ponadto wydaje mi się, że funkcja może zwracać typy tablicowe, ale nie kojarzę, by którakolwiek funkcja zwracała typ zwracany przez użytkownika.
Zobacz, czy mógłbyś jawnie zadeklarować taką funkcję, np.:
Function bzzz () as tyKierunek
i spróbuj skompilować projekt... ale wcześniej do modułu dodaj Option Explicit.

Jeśli nic w ten sposób nie uzyskasz oznacza to, że funkjce nie mogą zwracać typów zdefiniowanych przez użytkownika!

Mogą natomiast jawnie zwracać tablice:
Function bzzz() as TablicaKierunkow()
    bzzz() = JakasTablica()
End Function
lub zmienne tablicopodobne:
Function bzzz() as Variant

Hhhmmmm..
To co podałeś bardzo mi przypomina bazę danych z relacjami jeden do wielu. Może pomyśl jak to zamienić na prostą bazę danych.
Sposób przechowywania, wyszukiwania, edycji danych załatwi Ci baza. A Ty nie będziesz musiał z tym walczyć w kodzie i pożerać ogromne zasoby procesora i pamięci...


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

22-03-2005 20:43
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Mroowek




Typ: neutral
Postów: 51
Zarejestrowany: Feb 2005

Deklaracja funkcji sposobem:
Function bzzz () as tyKierunek
tez wyzuca blad.

Natomiast Twój drugi sposób:
Function bzzz() as TablicaKierunkow()
    bzzz() = JakasTablica()
End Function 
zadziałał dopiero wtedy gdy stworzylem nowy typ:
Type TablicaKierunkow
  TablicaKierunkow as TyKierunek
End Type

Wtedy wszystko poszlo.

Z Variantem mi nie działało - zgłaszało niezgodnosc typów.

A co do ostatniej kwestii dotyczącej bazy to chodziło Ci o wykożystanie Accessa???
W Twojej książce "Tworzenie własnych aplikacji w VBA" wyczytałem troche o wykorzystaniu baz accessa do tego typu aplikacji i nawet troche o tym myślałem, ale moja praca ma bazować na excelu, więc zrezygnowalem z accessa. A jestem raczej początkujący i nie za bardzo jeszcze znam wszystkie możliwości VBA i nie wgłębiałem się w temat baz danych. Ale kiedyś do tego dojdę... mam nadzieję

Pozdrawiam.

23-03-2005 00:04
Pokaż profil Mroowek  Wyślij email do Mroowek        4892300
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

W Excelu też to możesz zrobić, choć nie będzie to tak wydajne...


A propos TablicaKierunkow()
To tylko przykład, więc musiałeś to dostosować do swoich potrzeb. Chodziło tylko o to, że funkcja zwracać będzie tablicę czegoś tam, a nie pojedynczy rekord zdefiniowany przez użytkownika!

Więc,w  Twoim wypadku nadal w sekcji deklaracji TablicaKierunkow to jeden pojedynczy rekord.

Type tyKierunek
    ...
    ...
End Type

Public TablicaKierunkow() '- dynamiczna tablica, o nieokreślonym rozmiarze, do przechowywania tyKierunków.

Znając ilość pól (kolumn) tablicy:

Public Type CosTam
    lID As Long
    sImie As String * 30
    sNazwisko As String * 50
    sAdres As String * 150
End Type

Public TablicaCosTam() As String

Sub ZapisDoTablicy()
Dim i As Integer

i = 2 'ładuj od 2 wiersza
Do While Arkusz1.Cells(i, 1) <> ""
    ReDim Preserve TablicaCosTam(3, i - 2)
    TablicaCosTam(0, i - 2) = i - 1
    TablicaCosTam(1, i - 2) = Arkusz1.Cells(i, 1)
    TablicaCosTam(2, i - 2) = Arkusz1.Cells(i, 2)
    TablicaCosTam(3, i - 2) = Arkusz1.Cells(i, 3)
    i = i + 1
Loop

End Sub

Sub OdczytZTablicy()
Dim i As Integer

For i = LBound(TablicaCosTam()) To UBound(TablicaCosTam())
    Arkusz1.Cells(i + 2, 1) = TablicaCosTam(1, i)
    Arkusz1.Cells(i + 2, 2) = TablicaCosTam(2, i)
    Arkusz1.Cells(i + 2, 3) = TablicaCosTam(3, i)
Next i


End Sub


Miłej walki!


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

24-03-2005 07:08
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Wszystkich odpowiedzi: 4 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1