SFD.pl - Sportowe Forum Dyskusyjne

Chwilowa nieobecność administratora

temat działu:

Administracja i Moderatorzy

słowa kluczowe: , ,

Ilość wyświetleń tematu: 2606

Nowy temat Wyślij odpowiedź
...
Napisał(a)
Zgłoś naruszenie
Ekspert
Szacuny 11150 Napisanych postów 51579 Wiek 31 lat Na forum 24 lat Przeczytanych tematów 57816
Koszmar... jeszcze tylko kilka skryptów i forum będzie działać 3x szybciej!

Mateusz Pazdan
Administrator
...
Napisał(a)
Zgłoś naruszenie
Ekspert
Szacuny 11150 Napisanych postów 51579 Wiek 31 lat Na forum 24 lat Przeczytanych tematów 57816
czy ten kod to statystyki ankiet? albo kto ile i gdzie wywiesil, albo liczenie glosow.

dostalem nagrode?
dostalem dostalem dostalem?


przemq
**************
"Learn from the mistakes of others, you may not live long enough to make them all yourself."
...
Napisał(a)
Zgłoś naruszenie
Początkujący
Szacuny 2 Napisanych postów 257 Na forum 22 lat Przeczytanych tematów 6494
set rs = my_conn.execute("SELECT topicid, Identyfikator, rodzaj, nazwa, suma from ankietaprzypis order by topicid, rodzaj") 'rozkaz set tworzy obiekt typu my_conn (prawdopodobnie opisuje ankiete) o nazwie rs i o podanych parametrach
dbankieta = rs.getrows 'dbankieta to obiekt zawierajacy dane samych wierszy obiektu rs
rs.close 'zamkniecie obiektu
set rs = nothing 'wyczyszczenie obiektu

udbankieta = ubound(dbankieta,2) 'granica drugiego wymiaru tablicy wielowymiarowej
uRdbankieta = ubound(dbankieta) 'granica pierwszego wymiaru
redim temparray(uRdbankieta,20) 'stworzenie tymczasowej dwuwymiarowej tablicy o wielkosci pierwszego wymiaru rownego uRdbankieta, a drugiego 20

for i = 0 to udbankieta 'jedziemy po kolei z pierwszym wierszem
k = 0
z = i
for m = 0 to 20 'jedziemy z wierszami do 20, m do niczego sie nie przydaje, instrukcje maja byc wykonane co najwyzej 20 razy

if tosamo = true then
h = h + 1
else
h = i
end if

for j = 0 to uRdbankieta
temparray(j,k) = dbankieta(j,h) 'przepisanie wiersza z dbankieta o indeksie h do wiersza z temparray o indeksie k
next
z = z + 1 'inkrementacja z, oznaczajacego wiersz
k = k + 1 'inkrementacja k, oznaczajacego kolumne
if z = udbankieta+1 then 'jesli z w wyniku inkrementacji juz wychodzi poza obszar tablicy to znaczy ze trzeba juz wyjsc z fora
exit for
end if
if dbankieta(0,z) = dbankieta(0,i) then 'a jak nie to sprawdzamy czy w zerowej kolumnie wiersz o indeksie z rowna sie wierszowi o indeksie i, w praktyce dwa sasiednie wiersze tej samej kolumny
tosamo = true
else
tosamo = false
exit for 'jesli nie to samo to w dodatku wychodzimy z fora
end if
next

Application("dbankieta" & dbankieta(0,i)) = temparray
redim temparray(uRdbankieta,20) 'czyszczenie tablicy
i = z-1
next

Ogolnie w tym kodzie chodzi (chyba) o to, ze mamy tabelke ze znaczaca kolumna nr 0 i jesli dwa sasiednie wiersze maja te sama wartosc to kasowany jest wiersz poprzedni gdzie sie powtarzaja sie te wartosci... Tylko tyle udalo mi sie ustalic, ale pewnie nie o to chodzi, bo taka funckcje mozna by 13 razy prosciej napisac. Ale wydaje mi sie ze ten fragment kodu pomaga w odroznieniu ktory uzytkownik oddal juz glos w ankiecie i nie pozwala na ponowne glosowanie.
A jak jest naprawde Mateo?

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

...
Napisał(a)
Zgłoś naruszenie
Ekspert
Szacuny 11150 Napisanych postów 51579 Wiek 31 lat Na forum 24 lat Przeczytanych tematów 57816
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
...
Napisał(a)
Zgłoś naruszenie
Początkujący
Szacuny 2 Napisanych postów 257 Na forum 22 lat Przeczytanych tematów 6494
Dzieki. :)
Jak sie widzi sam kod bez opisow to trudno przypisac mu jakies konkretne zastosowanie... Nadal mi sie wydaje ze mozna by wszystko jescze troche uproscic, trzeba tylko posiedziec.
Pozdrowienia i powodzenia.

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

...
Napisał(a)
Zgłoś naruszenie
Ekspert
Szacuny 11150 Napisanych postów 51579 Wiek 31 lat Na forum 24 lat Przeczytanych tematów 57816
Oczywiście, że można uprościć, ale nie będzie już taki szybki
Odkryłem na przykład, że pętla "do until /loop" jest 2x wolniejsza od "for x=y to z /next"
W przyszłości forum będzie w ISAPI.
Na razie mam już dosyć. Żona mnie już nienawidzi
Dzisiaj chyba skończę.

Mateusz Pazdan
Administrator
...
Napisał(a)
Zgłoś naruszenie
Początkujący
Szacuny 9 Napisanych postów 3096 Na forum 22 lat Przeczytanych tematów 21099
MATEO ty mozgu!!! Kurcze i ktos mi powie ze kulturysci to nie elita intelektualna=))))

pozdrofka
Lukx
http://lukx.cnet.pl 

pozdrofka
lukx
http://www.lukx.com 

...
Napisał(a)
Zgłoś naruszenie
Początkujący
Szacuny 2 Napisanych postów 257 Na forum 22 lat Przeczytanych tematów 6494
Jak to trzeba nabywac doswiadczenie przez cale zycie?
Nic tylko cwiczyc i cwiczyc i odkrywac.

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

...
Napisał(a)
Zgłoś naruszenie
Początkujący
Szacuny 2 Napisanych postów 257 Na forum 22 lat Przeczytanych tematów 6494
Ale takie jazdy jak opisujesz to sie chyba zdarzaja w jezykach opracowywanych przez Microsoft

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

Stand and fight! Live by your heart. There's always one more try, I'm not afraid to die!

...
Napisał(a)
Zgłoś naruszenie
Ekspert
Szacuny 11150 Napisanych postów 51579 Wiek 31 lat Na forum 24 lat Przeczytanych tematów 57816
Osobiście preferuję Delphi, którego się intensywnie uczę.
Oczywiście debeściak to C++, ale nie jestem masochistą
Przeróbka całego forum na ISAPI w Delphi zajmie mi co najmniej rok... Poza tym Delphi chyba nie daje możliwości dostępu do zmiennych globalnych takich jak application() w ASP. Prawda jest taka, że najlepiej kupić serwer 16xXeon, pisać najszybciej jak się da i mieć wszystko w D.


Mateusz Pazdan
Administrator
Nowy temat Wyślij odpowiedź
Poprzedni temat

Zbanować Acida !!!

Następny temat

Do MODERATORÓW

forma lato