Hihi nie powiem, bo sam już nie wiem
Ale zaraz, zaraz...
Kod ten ładuje wszystkie ankiety do obiektu Application object, który jest dostępny dla każdej strony dla każdego użytkownika. Pozwala na 3x szybsze zbieranie danych, bo bez połączenia z bazą danych! Dane pobierane są na application_onstart czyli w chwili startu forum. Po zmianie danych modyfikowana jest jedynie zawartość obiektu application odpowiadająca numerowi tematu. Innymi słowy application("dbankieta1") jest zmienną globalną zawierającą ankietę wraz ze wszystkimi opcjami dla tematu nr 1.
set rs = my_conn.execute("SELECT topicid, Identyfikator, rodzaj, nazwa, suma from ankietaprzypis order by topicid, rodzaj") - <pobieranie danych dla wszystkich ankiet>
dbankieta = rs.getrows - <wkładamy do tablicy, bo tak szybciej>
rs.close - <zamykamy połączenie>
set rs = nothing - <czyścimy obiekt recordset>
udbankieta = ubound(dbankieta,2) - <liczba wszystkich wierszy z tablicy będąca jednocześnie liczbą opcji>
uRdbankieta = ubound(dbankieta) - <liczba pól w każdym wierszu>
redim temparray(uRdbankieta,20) - <temparray jest tablicą tymczasową - medium danych w której zawierają się wszystkie opcje dla _poszczególnej_ ankiety>
for i = 0 to udbankieta - <jedziemy po kolei po wszystkich opcjach, ale nie wiemy która należy do której ankiety>
k = 0 - <zmienna wskazująca numer opcji danej ankiety>
z = i - <zmienna sprawdzająca, czy kolejny rekord należy do tej samej ankiety aktualnie równa numerowi wiersza>
for m = 0 to 20 - <opcji dla poszczególnej ankiety może być max 20, więc po co robić większą tablicę?>
if tosamo = true then - <jeśli należy do tej samej ankiety to... (ma zastosowanie po pętli)>
h = h + 1 - <kolejny rekord. Nie można zmieniać i, bo przez next zgubimy jeden wiersz>
else
h = i - <jeśli kolejna ankieta to h jest numerem aktualnego rekordu>
end if
for j = 0 to uRdbankieta - <zapełniamy wiersz w tablicy tymczasowej>
temparray(j,k) = dbankieta(j,h)
next
z = z + 1 - <numer kolejnego wiersza w dbankieta>
k = k + 1 - <numer kolejnego wiersza w temparray>
if z = udbankieta+1 then - <jeśli koniec wierszy w dbankieta to przerwij>
exit for
end if
if dbankieta(0,z) = dbankieta(0,i) then - <sprawdź, czy kolejny rekord jest dla tej samej ankiety>
tosamo = true - <jeśli tak, to go wpisz ^>
else
tosamo = false - <jeśli nie, to przejdź do kolejnego rekordu>
exit for
end if
next
Application("dbankieta" & dbankieta(0,i)) = temparray - <zapisz ankietę(wszystkie jej opcje) do zmiennej globalnej z numerem tematu>
redim temparray(uRdbankieta,20) - <wyczyść tablicę tymczasową>
i = z-1 - <poprawia wartość określającą aktualny numer rekordu. Chyba niepotrzebne... ale nic nie kosztuje. Jak będę miał chwilkę, to usunę.>
next
Mimo stopnia skomplikowania funkcja działa i to bardzo szybko.
Teraz muszę się pobawić z odpowiedziami. Będą ładowane na podobnej zasadzie.
Oczywiście nie rzucam słów na wiatr
Mateusz Pazdan
Administrator