Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dopuna za Pseudo Column....

[es] :: Baze podataka :: Dopuna za Pseudo Column....

[ Pregleda: 3935 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bobiris
Slobodan Blagojevic
Čuvanje dece (četvoro malih) kod
kuće.
Sabac

Član broj: 2956
Poruke: 181
*.verat.net



Profil

icon Dopuna za Pseudo Column....12.07.2003. u 17:49 - pre 236 meseci
Mozda nisam bio jasan:

Meni u stvari treba FIZICKI broj reda (zapisa) u odredjenoj tabeli, koji bih sa sortiranjem podataka i klauzulama WHERE ... iskoristio za pravljenje Rang Liste. Znaci, podaci (clanovi, tj. ostvareni rezultati, sa svojim ID-om, naravno), menjaju mesta u zavisnosti od ostvarenih rezultata, jer prilikom unosenja podataka ide se redom kako su pristigli, a ne sortirano, a FIZICKI broj reda ostaje uvek fizicki, tako da je to u stvari Rang lista.

Ili neko ima bolji predlog? Tabela je jednostavna:


Clan_ID Godina Vrsta rez bod

00980 2002 Seniori 10,54 5,00


Clan_ID, Godina i Vrsta su PrimaryKey.

Odavde treba izvesti Rang Listu, tj. ko je u polju (na izvestaju) za osvojeno mesto, na na prvom mestu treba da pise: br. 1, ko je na drugom 2, itd ...

U svim helpovima i svim forumima koja sam posetio kazu da ORACLE ima ovu klauzulu, tj. PSEUDOCOLUMN, i da u svako vreme zna koji je fizicki broj reda, a za SQL kazu da takav izraz ne postoji, resava se preko UNIQUEIDENTIFIER ili preko funkcije NEWID(), koju Access ne prepoznaje. Sa UNIQUEIDENTIFIER nemam ideju kako bih to uradio, sto god probam, nije to to.
Boban (otac šestoro dece).
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Dopuna za Pseudo Column....12.07.2003. u 18:37 - pre 236 meseci
U Modules sekciju dodaj sledeći kod:
Code:
Public rowCounter As Long

Public Function rowCount(p As Variant) As Long
   
    rowCounter = rowCounter + 1
    rowCount = rowCounter
End Function


A u query koji koristiš dodaj jedno polje:
Code:
rc: rowCount([ClanID])



I to je to, polje rc će imati vrednosti 1,2,3,4... Dakle, treba da iz querija prosledis funkciji neko polje (u mom primeru polje ClanID)

NAPOMENA: rowCounter treba postaviti na 0 pre ponovnog korištenja querija, inače će u sledećem pozivu nastaviti da se povećava :) Možda u odgovarajućim događajima za formu ili report (Open, OnLoad, Close, ili koji već - probaj :)

Commercial-Free !!!
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Dopuna za Pseudo Column....12.07.2003. u 19:02 - pre 236 meseci
Odnosno, evo komplet rešenja.
U Modules sekciju dodaj sledeće funkcije:
Code:

Public rowCounter As Long

Public Function rowCount(p As Variant) As Long
    rowCounter = rowCounter + 1
    rowCount = rowCounter
End Function

Public Function resetCounter() As Long
    rowCounter = 0
    resetCounter = 0
End Function


A u svoj query dodaj polje:
Code:

rc: resetCounter()+rowCount([ClanID])


Dakle svaki put kad pozoveš query, polje rc će ići od 1 pa nadalje.

Pozdrav :)
Commercial-Free !!!
 
Odgovor na temu

bobiris
Slobodan Blagojevic
Čuvanje dece (četvoro malih) kod
kuće.
Sabac

Član broj: 2956
Poruke: 181
*.verat.net



Profil

icon Re: Dopuna za Pseudo Column....12.07.2003. u 20:46 - pre 236 meseci
Nesto ne valja! Rezultat je uvek i u svim poljima "1", i pre i posle tvoje ispravke, iako imam 7 razlicitih Clan_ID.

Uzgred, ovaj prvi red koji si napisao (Public rowCounter As Long), ne moze ici ispred drugog reda (Public Function rowCount(p As Variant) As Long), jer u tom slucaju ostane u prethodnom Codu (iznad linije razdvajanja kodova, a iza prethodnog iskaza "End Function". Fali jos i Dim rowCounter As Long, ali to je zato sto je kod mene ukljucen "Option Explicit".

Probao sam sve varijacije, uvek je rezultat "1" u svim poljima, odnosno "2", ako napisem

rowCounter = rowCounter + 2 (umesto + 1).
Boban (otac šestoro dece).
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Dopuna za Pseudo Column....12.07.2003. u 21:40 - pre 236 meseci
Evo baze prikačene ovde uz poruku. Ne znam u čemu je problem, meni ovo radi kako treba. Pokreni Query1 i vidi kolonu 'rc'. A kod pogledaj u Module1.

Public rowCounter As Long

treba da ti ide pre bilo koje funkcije ili sub-a. Dakle odmah ispod 'Option Explicit'.
Kako bilo, evo ti primer tu koji radi, pa vidi :)
Commercial-Free !!!
Prikačeni fajlovi
 
Odgovor na temu

bobiris
Slobodan Blagojevic
Čuvanje dece (četvoro malih) kod
kuće.
Sabac

Član broj: 2956
Poruke: 181
*.verat.net



Profil

icon Re: Dopuna za Pseudo Column....13.07.2003. u 01:46 - pre 236 meseci
E, OVAKO VEC RADI! Problem je bio u ovome sto si napisao:

Public rowCounter As Long
treba da ti ide pre bilo koje funkcije ili sub-a, odmah ispod "Option Explicit".

...ima samo jedan mali problem: svaki put kada sa navigatorom u formi idem levo-desno, on menja rezultat osvojenog mesta tako sto dodaje brojeve, tj. ponasa se nekontrolisano, TJ:

Prvi put kada otvorim formu i prodjem kroz sve zapise, sve je OK, e sad, kada idem unazad, dobijam sasvim druge brojeve. Probao sam vecinu opcija (on change, on selection change.... pa sam dodavao: Form.Requery, Form.Refresh...) ali nista ne pomaze.

Takodje kada odradis sam Query, pa u DateSheetView koji dobijes klikces PORED broja u polju rc, broj se konstantno menja!

Trudim se da pronadjem kako ovo da resim, ako u medjuvremenu budes ONLINE, a znas, molim te pomozi mi, da skratim muke.

pozdrav, Boban
Boban (otac šestoro dece).
 
Odgovor na temu

bobiris
Slobodan Blagojevic
Čuvanje dece (četvoro malih) kod
kuće.
Sabac

Član broj: 2956
Poruke: 181
*.verat.net



Profil

icon Re: Dopuna za Pseudo Column....13.07.2003. u 02:27 - pre 236 meseci
U stvari, evo šta se tačno događa:

U Tabeli sada ima ukupno 8 zapisa.

Kada u Formi pomoću navigatora idem jedan po jedan napred, dobijam ispravne rezultate. Međutim, ako sa prvog zapisa (koji je prilikom otvaranja forme tačan, tj na pravom, prvom mestu), "skočim" na poslednji (End dugme navigatora), taj poslednji dobije mesto na rang listi broj "2"!!! Kada idem korak po korak (sa navigatorom) da bih došao do tog poslednjeg, on onda ima osvojeno mesto broj "9", što je ispravno!!! Znači da "vožnjom" kroz zapise (u Formi), on u stvari uvek dodaje ono "+1"!!

Dalje važi ono što sam prethodno napisao, sa "vožnjom" napred-nazad kroz zapise.

Baš čudno! Kada međutim u Query-u pomoću navigatora idem napred nazad, ništa se ne događa, sve je u redu, dok ne "kliknem" negde u polje "rc". Onda opet sve pobrka, kao što sam u prethodnom odgovoru napisao.
Boban (otac šestoro dece).
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Dopuna za Pseudo Column....13.07.2003. u 08:00 - pre 236 meseci
Ne znam sad šta bi bilo najbolje ali evo ti jedno moguće rešenje: od podataka koje ti daje query treba napraviti novu tabelu sa tim istim podacima koje daje query. Posle toga koristi tu, privremenu tabelu za pregled. Dakle, polja iz query-ja (uključujući i ono nesretno polje 'rc') će se prepisati u novu tabelu kao da su ručno unesena i neće biti problema da onda šetaš po toj tabeli.

Evo iz Access helpa kako se pravi make-table query:

In query Design view, click the arrow next to Query Type on the toolbar, and then click Make Table. The Make Table dialog box appears.

In the Table Name box, enter the name of the table you want to create or replace.

Click Current Database to put the new table in the currently open database. Or click Another Database and type the name of the database you want to put the new table in. Type the path if necessary.

Click OK.

Drag from the field list to the query design grid the fields you want in the new table.

In the Criteria cell for the fields that you've dragged to the grid, type the criteria.
For information on specifying criteria, click .

To preview the new table before you create it, click View on the toolbar. To return to query Design view and make changes or run the query, click View on the toolbar.

To create the new table, click Run on the toolbar.


Da vidimo: napravićemo jedan make-table query koji će da podatke iz drugog query-ja da prepiše u neku privremenu tabelu. Zatim tu privremenu tabelu koristi za pregled gde hoćeš, a polje rc će biti baš kako treba.
Odnosno SQL izraz za moj primer:

SELECT Query1.[Ime i Prezime], Query1.ClanID, Query1.rc INTO privremenaTabela
FROM Query1;

To je to, možda ima i neki lakši način, al' Bože moj.. :)

Evo ti ovde primer prikačen uz poruku. Query1 je onaj stari koji smo već koristili. E sad, imaš jedan novi query (Query3) i ako ga pokreneš on će podatke koje ti daje query1 da prepiše u tabelu 'privremenaTabela' (pošto ova tabela ne postoji, biće napravljena nova - svaki put kad pokreneš query3 briše se stara i pravi nova tabela sa podacima iz query1) sve sa poljem 'rc'. A ti onda koristi ovu tabelu za pregled.

Pozdrav :)
Commercial-Free !!!
Prikačeni fajlovi
 
Odgovor na temu

bobiris
Slobodan Blagojevic
Čuvanje dece (četvoro malih) kod
kuće.
Sabac

Član broj: 2956
Poruke: 181
*.verat.net



Profil

icon Re: Dopuna za Pseudo Column....14.07.2003. u 01:24 - pre 236 meseci
EH, DA!

A ja sve vreme pokušavam da napravim VIEW sa "create view blabla as select * from rezultati", ali neće, valjda zbog one tvoje funkcije "RowCount".

OK, sve sam sredio i sve radi (Hmm, za sada)!

Pratio sam malo izvršavanje one tvoje Public funkcije. Ona u stvari samo jedanput ode na "reset", resetuje na nulu, i više se tu ne vraća, nego stalno dodaje "+1" na postojeće zapise. Ne znam da li je to kod Accessa interno tako uređeno, ili zbog čega već. Uglavnom, kada jednom "napusti" tj. odradi "reset", smatra to za završenim poslom. Hmm!

Ah da! Pokušavam da nađem gde mogu da mu promenim sistemske poruke (barem neke), da mogu da upišem šta ja hoću, naravno na Srpskom.

Pozdrav!
Boban (otac šestoro dece).
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Dopuna za Pseudo Column....14.07.2003. u 09:25 - pre 236 meseci
rc: resetCounter()+rowCount([ClanID])

Da, brojač se postavi na 0 samo jednom baš kako i treba. Jesi li se zapitao čemu uopšte prosleđujemo [ClanID] drugoj funkciji kad taj podatak u stvari i ne koristimo u samoj funkciji? Umesto [ClanID] možeš da staviš i npr. [Ime i Prezime] ili neko drugo polje.

Ako staviš resetCounter([ClanID]) onda će i ova funkcija da se poziva za svaki red, bez obzira što taj podatak ne koristiš nigde u funkciji. Upravo zato i imamo rowCount([ClanID]). Ako bi bilo samo rowCount() onda bi se ono +1 izvršilo samo jednom za prvi red query-ja i ostalo bi na 1; funkcija se više ne bi pozivala uopšte.

I toliko od mene ;)


Commercial-Free !!!
 
Odgovor na temu

bobiris
Slobodan Blagojevic
Čuvanje dece (četvoro malih) kod
kuće.
Sabac

Član broj: 2956
Poruke: 181
*.verat.net



Profil

icon Re: Dopuna za Pseudo Column....14.07.2003. u 13:24 - pre 235 meseci
Pozdrav!

Kao prvo, molim te razmotri ovaj Cod i reci da li to moze, ili ne moze:

SELECT DISTINCT rezultati.clan_ID, ZbirBodova.Zbir2002Jun, ZbirBodova.Zbir2003Jun, (SELECT resetCounter()+rowCount([rezultati.Clan_ID]) FROM rezultati WHERE rezultati.godina=2002 AND rezultati.vrsta_ID=2) AS RangJun2002, (SELECT resetCounter()+rowCount([rezultati.Clan_ID]) FROM rezultati WHERE rezultati.godina=2003 AND rezultati.vrsta_ID=2) AS RangJun2003
FROM rezultati INNER JOIN ZbirBodova ON rezultati.clan_ID=ZbirBodova.clan_ID
ORDER BY ZbirBodova.Zbir2002Jun DESC;

REZULTAT: Dobijem sve podatke, izuzev "AS RangJun2002" i "AS RanJun2003", naime ova polja su kreirana, ali su prazna. Sledeci Code radi ispravno:

SELECT DISTINCTROW rezultati.clan_ID, ZbirBodova.Zbir2002Jun, resetCounter()+rowCount([rezultati.Clan_ID]) AS RangJun2002
FROM rezultati INNER JOIN ZbirBodova ON rezultati.clan_ID = ZbirBodova.clan_ID
WHERE rezultati.godina=1 AND rezultati.vrsta_ID=2
ORDER BY ZbirBodova.Zbir2002Jun DESC;

Ovo je Code za samo jedno takmicenje i samo jednu godinu, i odradjuje dobro.

Problem je sto ja imam 5 takmicenja (u kojima se vrednuje osvojeno mesto), i 10 godina, pa stoga treba da napravim 5 x 10 = 50 Qeury-a (MakeTableQuery), koji ce napraviti 50 tabela kao rezultat njihovog izvrsavanja, svih 50 Query-a treba da smestim u "ON LOAD" u formi, da bi osvezili podatke. Naravno, tabele cu povezati u jedan Query, koji cu koristiti kao "recordSource".

Zasto ne moze pomocu PRVOG Coda (sa podupitima), da se dobije i podatak za broj reda?

pozdrav, Boban

Boban (otac šestoro dece).
 
Odgovor na temu

bobiris
Slobodan Blagojevic
Čuvanje dece (četvoro malih) kod
kuće.
Sabac

Član broj: 2956
Poruke: 181
*.verat.net



Profil

icon Re: Dopuna za Pseudo Column....14.07.2003. u 16:40 - pre 235 meseci
ZAPRAVO!!

Onaj PRVI Code u prethodnom odgovoru uopšte i ne prolazi kroz funkciju u VB-u!
Kada stisnem F9, da ga sačekam, on ne prijavljuje ništa, samo odradi, ali bez rezultata, logično, jer nije ni prošao kroz petlju. DRUGI Code naravno, stane na F9 i mogu da vidim trenutne vrednosti.

Da li je to zbog subQuery-a ili zbog čega bi moglo da bude.
Boban (otac šestoro dece).
 
Odgovor na temu

[es] :: Baze podataka :: Dopuna za Pseudo Column....

[ Pregleda: 3935 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.