Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: tablice - problem z utracanymi wartosciami
andrey
Łódź



Typ: neutral
Postów: 295
Zarejestrowany: Mar 2003
tablice - problem z utracanymi wartosciami

Witam,
Mam nastepujacy problem deklaruje tablice ale nie znam na poczatku ile bedzie musiala miec lelementow wiec z module pisze

Public tabl As String

Za pomoca inputBox pobieram wartosci i wczytuje je do tablicy niestety za kazdym razem musze zmienic rozmiar tablicy przy uzyciu polecenia ReDim
Czy podczas zmiany rozmiwarow tablicy tracone sa wartosci jakie przechowuje? Wedlug teorii na vb4all nie wiec sie dziwie
Poprzedze moje rozwazania kawalkiem kodu latwiej to bedzie przeanalizowac

Private Sub Command3_Click()
Dim g As String
Dim i As Long
  On Error GoTo Err1
  g = InputBox("Wprowadź wartosc", "Wprowadź wartosc", App.Path)
  i = UBound(tabl) ' sprawdzam jakie rozmiary ma nasza tablica do tej pory
    i = i + 1 ' potzrebna nam jest tablica o jeden wieksza
    ReDim tabl(i) ' zmieniam rozmiar tablicy
      tabl(i) = g ' przypisuje nowa wartosc do nowej pozycji tablicy
      ' Me.Print tabl(i) ' tutaj kontolnie sobie sprawdzalem
Exit Sub
Err1:
If Err.Number = 9 Then ' naciskam przycisk Cancel
  Exit Sub
Else
    MsgBox "Uwaga błąd: " & Err.Number & Space(1) & Err.Description, vbOKOnly, "Błąd: Dodaj"
End If
End Sub
Private Sub Command4_Click()
  Me.Cls
  On Error GoTo Err2
      For b = 1 To UBound(tabl) ' chce wyswietlic wszystkie elementy tablicy
      Me.Print tabl(b) ' a wyswietlany jest tylko ostatni
      Next b
  Exit Sub
Err2:
    MsgBox "Uwaga błąd: " & Err.Number & Space(1) & Err.Description, vbOKOnly, "Błąd: Wyświetl"
End Sub

Private Sub Form_Load()
ReDim tabl(0) ' jezeli pomyslicie ze problemem jest zero
' to ie jest to samo bylo jak byla tu 1
End Sub

W jaki sposob to ominac?
Pozdrawiam
Andrzej


_____________________________________________
http://www.carbondesign.pl/ - rowery poziome, trójkołówce, handbike-i, tuning, akcesoria

21-06-2004 09:15
Pokaż profil andrey  Wyślij email do andrey   Odwiedź stronę andrey       3078613
andrey
Łódź



Typ: neutral
Postów: 295
Zarejestrowany: Mar 2003

Witam,
Przepraszam ze nie daje nikomu okazji sie popisac ze znajomoscia jezyka ale wlasnie odnalazlem rozwiazanie i chcialbym sie nim podzielic:
Otoz Instrukcja ReDim za kazdym razem usuwa wartosci z tablicy w celu oszczedzenia pamieci Jednak niekiedy chcemy powiekszyc tablice i nie usuwac z niej wartosci wiec uzywamy wtedy dodatkowego slowa Preserve
Podam kilka przykladow:
ReDim Preserve tabl(UBound(tabl) + 1) powiekszy moja tablice o 1 "miejsce" bez utraty zawartosci

ReDim Preserve tabl(10, UBound(tabl, 1) + 1)

Ale nie mozna uzyc go tak:
ReDim Preserve tabl(UBound(tabl, 1) + 1, 10)
Poniewaz vb zwroci blad
Podobnie bedzie jak bedziemy chcieli zmienic dolny akres tablicy

Pozdrawiam
Andrzej

[Post edytowany dnia 21-06-2004 09:27 przez andrey]


_____________________________________________
http://www.carbondesign.pl/ - rowery poziome, trójkołówce, handbike-i, tuning, akcesoria

21-06-2004 09:26
Pokaż profil andrey  Wyślij email do andrey   Odwiedź stronę andrey       3078613
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Andrzejku na http://www.coderscity.pl/no-vb4all/forum/ napisano:
Jeżeli użyte zostało słowo Preserve, można zmienić tylko ostatni wymiar tablicy i nie można zmieniać liczby wymiarów tablicy. Na przykład, jeżeli tablica ma tylko jeden wymiar, można zmieniać jego rozmiar, gdyż jest to ostatni i jednocześnie jedyny wymiar. Jeżeli tablica ma dwa lub więcej wymiarów, można zmieniać rozmiar tylko ostatniego wymiaru i zachować zawartość tablicy.
Przykład pokazuje jak można zwiększyć rozmiar ostatniego wymiaru tablicy dynamicznej bez kasowania jakiejkolwiek istniejącej danej zawartej w tablicy.

ReDim X (10, 10, 10)
. . .
ReDim Preserve X (10, 10, 15)

Gdy użyte jest słowo Preserve można zmieniać rozmiar tablicy tylko w górę, zmiana dolnej granicy spowoduje wystąpienie błędu.

Jeżeli stworzona zostanie tablica mniejsza niż była, dane w usuniętych elementach zostaną stracone. Jeżeli tablica zostanie przypisana do procedury przez refernecję, nie można zmieniać jej wymiarów wewnątrz procedury.



_____________________________________________
Karolina

21-06-2004 23:06
Pokaż profil karolinavb  Wyślij email do karolinavb   
andrey
Łódź



Typ: neutral
Postów: 295
Zarejestrowany: Mar 2003

Karolino uroczyscie przepraszam za ta gafe wypowiedzialem sie zbyt pochopnie nie przejzawszy dokladnie tego co ma do zaoferowania ten serwis Kajam sie przed obliczem szanownej zbiorowosci uzytkownikow vb4all i jeszcze raz przepraszam
Andrzej


_____________________________________________
http://www.carbondesign.pl/ - rowery poziome, trójkołówce, handbike-i, tuning, akcesoria

21-06-2004 23:19
Pokaż profil andrey  Wyślij email do andrey   Odwiedź stronę andrey       3078613
Wszystkich odpowiedzi: 3 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1