[ nikola-m @ 23.10.2009. 16:34 ] @
Nigde nisam nasao resenje za sledeci problem.
U tabeli Duznici su i kolone VisDuga, VisTakse. Vrednost u VisTakse zavisi od VisDuga. TJ. za visinu duga od 0.5-25 VisTakse je 5, od 25.01- 75.00 , taksa je 8, za vis.duga od 75.01-150 taksa je 11. itd. Nakon svakog upisa VisDuga za izracunavanje takse koristio sam UPDATE upite -
UPDATE isplate
SET vistakse = 11 WHERE iznos BETWEEN 75.01 And 150;pa sledeci UPDATE.
Postoji li nacin da se jednom radnjom izrsi izracunavanje vis.takse? Napomena: VisinaTakse je nepromenjiva, tj. zavisi samo od visine duga (od-do).
[ captPicard @ 23.10.2009. 16:59 ] @
Sada bubam napamet jer nisam probao, ali mislim da bi moglo ovako nekako (ako Access ima te funkcije)


Code:

UPDATE isplate
SET vistakse =
       CASE
        WHEN (cijena BETWEEN 0 AND 25,0) THEN 5
        WHEN (cijena BETWEEN 25,01 AND 35) THEN 7
        WHEN (cijena > 35,01) THEN 8
        ELSE 0
END


Kažem ti, to je ovako napamet, vjerojatno je malo drukčija sintaksa, ali skužiti ćeš bit.
[ nikola-m @ 23.10.2009. 17:43 ] @
Ovo nije resenje, verovatno nekako slicno, ne mogu da slozim sintaksu.
[ captPicard @ 23.10.2009. 18:04 ] @
Ovako bi trebalo raditi:

Code:
UPDATE tablica SET nesto =
case
when iznos > 20 then 5
when iznos > 50 then 6
end



samo dodaj between umjesto > a možda niti ne moraš...

Edit:

hahaha, tek sada sam skužio da sam ti napisao istu stvar. Čekaj, sada ću probati, pa ti javim.
[ nikola-m @ 23.10.2009. 18:20 ] @
Ovaj problem sam resavao na ovaj nacin:
Private Sub Command1_Click()
If IsNull(Me![VisTakse]) Then
DoCmd.OpenQuery "qryDo50", acViewNormal
DoCmd.OpenQuery "qryOd50Do150", acViewNormal
Else
End If
End Sub

No, i ovom slucaju, koliko ima upita toliko puta se mora udarati po dugmetu.
[ captPicard @ 23.10.2009. 18:24 ] @
Evo, pokušavao, pa i ja nešto naučio:

Code:
UPDATE isplate SET vistakse
IIF(cijena BETWEEN 0 AND 20, 5, 
IIF(cijena BETWEEN 20,01 AND 35, 7, 
IIF(cijena BETWEEN 35,01 AND 50, 8)))


Za ovo nisam znao, ali izgleda mi kao lijepo rješenje

Pozdrav!
[ captPicard @ 23.10.2009. 18:32 ] @
Citat:
nikola-m: Ovaj problem sam resavao na ovaj nacin:
Private Sub Command1_Click()
If IsNull(Me![VisTakse]) Then
DoCmd.OpenQuery "qryDo50", acViewNormal
DoCmd.OpenQuery "qryOd50Do150", acViewNormal
Else
End If
End Sub

No, i ovom slucaju, koliko ima upita toliko puta se mora udarati po dugmetu.


Probaj ovo moje rješenje, ali i ovo tvoje možeš napraviti da ne lupaš po dugmetu onoliko puta koliko ima slučajeva. Recimo da imaš 5 različitih situacija:

Code:
for i=1 to 5
DoCms.OpenQuery "qry" & i, acViewNormal
next


Naravno, query-e nazoveš ovako: qry1, qry2, qry3...
[ nikola-m @ 23.10.2009. 19:42 ] @
Probao sam tvoje resenje sa Update i ne funkcionise. A ovo drugo nece, verovatno se ne snalazim najbolje.
Ako ti bas nije dosadno daj mi kompletan kod.

[ nikola-m @ 23.10.2009. 19:44 ] @
Ovako sam primenio:

Private Sub Command1_Click()
If IsNull(Me![VisTakse]) Then
For i = 1 To 2
DoCmd.OpenQuery "qry1" & i, acViewNormal
Next
DoCmd.OpenQuery "qry2" & i, acViewNormal
Else
End If
End Sub
[ nikola-m @ 23.10.2009. 22:15 ] @

Interesantno, mislio sam da ce resenje biti veoma jednostavno i brzo. U svakom slucaju hvala captPicard-u sto se zainteresovao. Verovatno mnogima ovo izgleda jednostavno , no ?
[ captPicard @ 24.10.2009. 11:35 ] @
Ma ovo bi ti moralo raditi, meni radi:

Code:
UPDATE isplate SET vistakse
IIF(cijena BETWEEN 0 AND 20, 5, 
IIF(cijena BETWEEN 20,01 AND 35, 7, 
IIF(cijena BETWEEN 35,01 AND 50, 8)))


Zalijepi ovdje bazu, pa ću pogledati.

A ovo drugo nisi dobro napisao:

Code:
Private Sub Command1_Click()
If IsNull(Me![VisTakse]) Then
For i = 1 To 2
DoCmd.OpenQuery "qry" & i, acViewNormal
Next
End If
End Sub 


Ovo "qry" & i će kao rezultat imati u jednom slučaju qry1 a u drugom qry2. Dakle, query-i ti se moraju zvati qry1 i qry2.
[ nikola-m @ 24.10.2009. 12:18 ] @

Utvrdi zasto kod mene ne radi !
[ captPicard @ 24.10.2009. 12:39 ] @
Falio je jedan = u query-u.

A ovo drugo nisi napisao kako sam ti rekao.

Evo ispravljeno.

[ nikola-m @ 24.10.2009. 13:03 ] @
Hvala, izvini sto sam te mucio oko mog problema, i oduzeo ti prilicno vremena.
[ izonic @ 24.10.2009. 13:14 ] @
Ovaj kod ide u neki modul.

Code:
Function VisinaTakse(Dug As Currency)

Select Case Dug

Case 0.5 To 25
VisinaTakse = 5
Case 25 To 75
VisinaTakse = 8
Case 75 To 150
VisinaTakse = 11
Case Else

MsgBox "Nekorektna vrijednost duga"
VisinaTakse = "Error"
End Select
End Function


SQL-Query
Code:
SELECT Duznici.VisDuga, VisinaTakse([VisDuga]) AS VisinaTakse
FROM Duznici;
[ captPicard @ 24.10.2009. 13:31 ] @
Citat:
nikola-m: Hvala, izvini sto sam te mucio oko mog problema, i oduzeo ti prilicno vremena.


Ma sve ok, bitno da radi
[ nikola-m @ 24.10.2009. 13:58 ] @
Izonic ovo je super , samo sto ne azurira potrebne vrednosti u tabeli, naravno jer je select.
[ izonic @ 24.10.2009. 16:13 ] @
Namjerno nisam stavio azuriranje jer sam smatrao da nema potrebe to azurirati.
Ako pak zelis azurirati vjerujem mozes i sam napraviti Query.
[ nikola-m @ 24.10.2009. 17:58 ] @

Ako mislis da se nakon ili pri SELECT-u, azurira, iskreno receno ne znam. Videli smo korisnih resenja sto tvojih, sto kaptPicarda, pa ako si raspolozen dobro bilo da do kraja objasnis drugu recenicu.
[ captPicard @ 24.10.2009. 18:47 ] @
Ovako nekako je mislio:

Code:
UPDATE tblDuznici SET VisinaTakse =
(SELECT VisinaTakse([VisDuga])
FROM tblDuznici)
[ izonic @ 24.10.2009. 23:47 ] @
UPDATE Duznici SET VisinaTakse = VisinaTakse([VisDuga])
[ nikola-m @ 25.10.2009. 08:58 ] @
Zasto sam zatrazio pomoc. Pre desetak godina, radio sam u firmi koja je odjednom dobila oko 18 000 lica - duznika -
za koje je trebalo saciniti isto toliko predloga (u cetiri primerka) za izrvsenje i poslati sudovima na teritoriji gde imaju stalno boraviste.
Zatrazio sam od gazde da od neke firme ili pojedinca poruci program. Moj predlog im je tada bio nerealan, zapravo bilo im je smesno sta ja to zahtevam. Jer to zaboga treba da se plati. Sve u svemu, radi kako znas ali do odredjenog roka svi predlozi moraju biti zavrseni. Tada je moje znanje bilo samo u radu sa EXELOM. Tako sam i poceo, sve podatke konstatovao u EXEL, a nekoliko daktilografa sacinjavalo predloge - racun po racun- jasno da je dolazilo do gresaka. Posle izvesnog vremena poceo sam da upoznajem ACCESS. I da skratim, prebacio sve podatke, napravivsi u izvestaju obrazac koji mi je trebao. Potom vrsrsio stampu od IDbr-IDbr. Najveci problem odnosno gubljenje vremena je izracunavanje takse. Savladao sam i to pomocu UPDATE upita, ali upotrebivsi 6 upita.
Pre nekog vremena setio sam se svih dogadjaja i tog problema. Znam da i sada ima onih radnika koji moraju da se snalaze, (ako hoce da zadrze radno mesto).
Imamo dobra resenja i kapPicarda i Izonica .
Nadam se da ce njihova kao i bezbroj drugih na ovom forumu, nekome ko je primoran kao sto sam to bio ja koristiti.
[ Take 5 @ 25.10.2009. 11:52 ] @
Citat:
nikola-m:...  Najveci problem odnosno gubljenje vremena je izracunavanje takse. Savladao sam i to pomocu UPDATE upita, ali upotrebivsi 6 upita...

Pogresno postavljas stvari. Uopste ti ne treba to posebno polje u tabeli koje stalno azuriras, dovoljan je jedan upit (primer si vec dobio sa Select Case Dug...), koji ce se izvrasavati svaki put kada pokreces report (izvestaj) i koji ce na tom reportu da generise izracunatu vrednost...
Jedno od osnovnih pravila Accessa je da rezultate racunskih operacija nad vise polja, nema svrhe cuvati u posebnom polju tabele, nego ih generises u momentu kada ti takvi podaci zatrebaju, pomocu upita, izvestaja, formi...

PS
Postoje izuzeci od svakog pravila, ali mi se cini da resenje tvog problema ne potpada pod tu kategoriju!
Dakle, uprosti celu stvar da bi se brze izvrsavala, a obavice ti sigurno sav posao koji je potreban!