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

Problem sa SQL-om???

[es] :: Access :: Problem sa SQL-om???

[ Pregleda: 2921 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Problem sa SQL-om???09.01.2009. u 14:25 - pre 185 meseci
Pozdrav svima u bazi imam Query sa ovim SQL-om:

Code:

PARAMETERS [DatumOd] DateTime, [DatumDo] DateTime, [BrojVozilaUnos] Text ( 255 );
SELECT og.VoziloID, Sum(og.Kolicina) AS Prva, First(og.Kolicina) AS Druga, Format([Prva]-[Druga],"0") AS ukupno
FROM tblOtpremnica AS og
WHERE (((og.RedniBrojO) Between (select first(RedniBrojO) from  tblOtpremnica where og.Datum>=[DatumOd] and og.Datum<=[DatumDo] and PunRezervoar='Da' and og.VoziloID=[BrojVozilaUnos]) And (select last(RedniBrojO) from  tblOtpremnica where og.Datum>=[DatumOd] and og.Datum<=[DatumDo] and PunRezervoar='Da' and og.VoziloID=[BrojVozilaUnos])))
GROUP BY og.VoziloID;


i obracun mi radi kako treba, kada probam direktno iz programa koji radim u VB6 preko ADO kontrolera i uradim isti SQL sa malo izmjena NE DOBIJAM TACAN RACUN. SQL u programu izgleda ovako:

Code:

rs.Open "SELECT og.VoziloID='" & cmbVozilo.Text & "', Sum(og.Kolicina) AS Prva, First(og.Kolicina) AS Druga, Format([Prva]-[Druga]) AS ukupno FROM tblOtpremnica AS og WHERE (((og.RedniBrojO) Between (select first(RedniBrojO) from  tblOtpremnica where VoziloID='" & cmbVozilo.Text & "' and Datum>=" & SQLDate(sDatumOd) & " and Datum<=" & SQLDate(sDatumDo) & " and PunRezervoar='Da') And (select last(RedniBrojO) from  tblOtpremnica where VoziloID='" & cmbVozilo.Text & "' and Datum>=" & SQLDate(sDatumOd) & " and Datum<=" & SQLDate(sDatumDo) & " and PunRezervoar='Da'))) GROUP BY og.VoziloID", BazaPodatakaGlavna, adOpenStatic, adLockOptimistic


u cemu mi je problem????
A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Problem sa SQL-om???09.01.2009. u 18:51 - pre 185 meseci
Tesko je videti sta je problem kad je izraz ovako veliki. ne mozemo da probamo nista, osim da gledmo u SELECT izraz. Savet: pokusaj ovo:

Code:

dim strSQL as string

strSQL = "SELECT og.VoziloID='" & cmbVozilo.Text & "', Sum(og.Kolicina) AS Prva, First(og.Kolicina) AS Druga, Format([Prva]-[Druga]) AS ukupno FROM tblOtpremnica AS og WHERE (((og.RedniBrojO) Between (select first(RedniBrojO) from  tblOtpremnica where VoziloID='" & cmbVozilo.Text & "' and Datum>=" & SQLDate(sDatumOd) & " and Datum<=" & SQLDate(sDatumDo) & " and PunRezervoar='Da') And (select last(RedniBrojO) from  tblOtpremnica where VoziloID='" & cmbVozilo.Text & "' and Datum>=" & SQLDate(sDatumOd) & " and Datum<=" & SQLDate(sDatumDo) & " and PunRezervoar='Da'))) GROUP BY og.VoziloID"

DEBUG.PRINT strSQL

rs.Open strSQL, BazaPodatakaGlavna, adOpenStatic, adLockOptimistic



u cemu mi je problem????  




Deklarisi varijablu strSQL pa joj dodeli verdnost koju si zamislio da posaljes rekrdsetu. Onaj DEBUG.Print ce ti ispisati SELECT izraz (Ctrl G da dobijes prozor ako se nevidi) Tos to si dobio za strSQL iskopiraj u clipboard (Ctrl C). Onda pokusaj da kreiras novi kveri i sa Ctrl P iskopiraj svoj SQL izraz. Ako ne moze, Access ce ti malo detaljnije reci reci sta ne valja. Uz malo srece, popravices SELECT izraz tako da proradi, pa onda nazad u kod da to isto popravis u kodu.


E, sad kad bolje pogledam, ti rece 'malo izmenjen kod' Koliko vidim, nije izmenjen na dobro. Tvoj SELECT koji radi kao kveri glasi
Citat:

SELECT og.voziloid,
SUM(og.kolicina) AS prva,
First(og.kolicina) AS druga,
Format([prva] - [druga],"0") AS ukupno
FROM tblotpremnica AS og

Tvoj strSQL za rekordset izgleda ovako:
Citat:

"SELECT og.VoziloID='" & cmbVozilo.Text
& "', Sum(og.Kolicina) AS Prva,
First(og.Kolicina) AS Druga,
Format([Prva]-[Druga]) AS ukupno
FROM tblOtpremnica AS og .........


to ce se razviti u nesto ovako:
Code:

SELECT og.VoziloID = 'lada niva',  Sum(og.Kolicina) AS Prva, 
First(og.Kolicina) AS Druga, 
Format([Prva]-[Druga]) AS ukupno 
FROM tblOtpremnica AS og .......

Ovo ne moze u Accesu:
Code:
SELECT og.VoziloID = 'lada niva'

ne moze nigde, ne mozes u kveriju da dodelis vrednost koloni iz tabele koja je u FROM. Mozda si hteo da kazes
Code:

SELECT og.VoziloID ,  Sum(og.Kolicina) AS Prva, 
First(og.Kolicina) AS Druga, 
Format([Prva]-[Druga]) AS ukupno 
FROM tblOtpremnica AS og ....
WHERE....
AND og.VoziloID = = 'lada niva'"


Ne mogu vise od ovoga da ti pomognem. Pokazao sam ti kako se radi debug u ovakvim slucajevima i nasao sam ti jednu garantovanu gresku u kveriju. To je sve sto mogu da kazem, nema detalja za dalje.







 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Problem sa SQL-om???09.01.2009. u 19:32 - pre 185 meseci
Jedna mala ispravka :
Code:
SELECT og.VoziloID = 'lada niva'
Ovo je svakako validno u JET SQL, vratiće kao vrednost TRUE / FALSE, s tim što će polje u Accessu imati naziv Expr1003 ili tome slično. Ako je VoziloID tipa Long Integer, onda će uvek biti FALSE.
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Problem sa SQL-om???09.01.2009. u 22:09 - pre 185 meseci
Nikola je u pravu. Ovo je odstupanje Access SQL-a od standarda, u ovom slucaju na gore. Ociglednu gresku maskira pogresnim odgovorom. Nikolino zapazanje objasnjava mogucnost da prikazani kveri ne puca, nego rekordset daje pogresne rezultate. tacno, postavljac pitanja nije rekao da mu puca kveri, nego da
Citat:
NE DOBIJAM TACAN RACUN
Nikolino zapazanje resava konkretan problem. Sve sto sma ja rekao stoji, ali nazalost ne pomaze mnogo. Nisam dzabe rekao nekoliko puta da je Nikola majstor
 
Odgovor na temu

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Re: Problem sa SQL-om???10.01.2009. u 07:48 - pre 185 meseci
Pozdrav svima, sinoc sam polako pregledao kod i uradio onako kako treba tako da mi je sada sve reseno, kod je trebao izgledati ovako:

Code:

"SELECT og.VoziloID, Sum(og.Kolicina) AS Prva, First(og.Kolicina) AS Druga, Format([Prva]-[Druga]," & 0 & ") AS Ukupno FROM tblOtpremnica AS og WHERE (((og.RedniBrojO) Between (select first(RedniBrojO) from  tblOtpremnica where og.Datum>=" & SQLDate(sDatumOd) & " and og.Datum<=" & SQLDate(sDatumDo) & " and PunRezervoar='Da' and og.VoziloID='" & cmbVozilo.Text & "') And (select last(RedniBrojO) from  tblOtpremnica where og.Datum>=" & SQLDate(sDatumOd) & " and og.Datum<=" & SQLDate(sDatumDo) & " and PunRezervoar='Da' and og.VoziloID='" & cmbVozilo.Text & "'))) GROUP BY og.VoziloID; ", BazaPodatakaGlavna, adOpenKeyset, adLockOptimistic


Hvala svima na pomoci!
A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
 
Odgovor na temu

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Re: Problem sa SQL-om???12.01.2009. u 11:01 - pre 185 meseci
Pozdrav ovaj SQL-upit tek sam sada vidio da ne radi, u opste mi ne uzima parametre od Prvog punog do zadnjeg punog, znaci to odredjujem sa "PunRezervoar='Da'" e ako npr zadnjih imam 5 rekorda sa PunimRezervoarom='Ne' uzme i to u racun a nesmije, mozete mi pomoci kako da izmjenim kod???
A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
 
Odgovor na temu

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Re: Problem sa SQL-om???13.01.2009. u 20:49 - pre 185 meseci
Neznam ako nisam bio dovoljno jasan recite mi molim vas, nemogu nikako da resim ovaj problem evo prilozit cu i sliku pa mozda lakse skontate o cemu govorim...


A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
Prikačeni fajlovi
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Problem sa SQL-om???15.01.2009. u 15:00 - pre 185 meseci
Da si bas jasan, nisi Da si na pogresnom putu - jesi. Kveri koji pokusavas da napravis je suvise slozen da bi se iz glave napisao kao SQL string unutar aplikacije.

prepurucujem da prvo razmislis i objasnis nam ne-tehnickim jezikom sat to zelis da saberes. Onda napravi kveri koji vrsi sabiranje, nezavisno od prikaza na formi. Zaboravi na formu na trenutak. Napravi kveri koji ti vrsi sabiranje po vozilu, bez parametara, i tu cemo moci da vidimo sta radi a sta ne radi. Onda ces taj kveri da pozoves sa forme i tvoj SQL string ce biti mnogo jenostavniji, tipa

"SELECT * FROM qryZbir WHERE Vozilo = '" & og.VoziloID='" & cmbVozilo.Text

qryZbir treba da sadrzi nesto kao


SELECT
Sum(og.Kolicina) AS Prva, First(og.Kolicina) AS Druga
FROM tblOtpremnica AS og
WHERE PunRezervoar = 'Da' ........
GROUP BY Vozilo

Lakse je napisati ispravan kveri u query prozoru nego s emaltretirati u VB kodu.



 
Odgovor na temu

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Re: Problem sa SQL-om???15.01.2009. u 15:10 - pre 185 meseci
@Zidar vjeruj mi da ni sam ne znam kako pravilno da se izrazim, ali pokusacu ovako:

Imam tabelu (tblOtpremnica), u njoj imam polja:
1. RedniBrojO - AutoNumber
2. Datum - DateTime
3. Kolicina - Number
4. PunRezervoar - Text (Da,Ne)
5. VoziloID - Text

E sada u formi izaberem vozilo tj, (VoziloID) i stavim od Datuma do Datuma, na osnovu ovih podataka treba da mi: sabere kolicinu goriva (Kolicina) od prvao PunogRezervoara do zadnje PunogRezervoara stim sto mi oduzme kolicinu prvog PunogRezervoara.

Dali si me sada skontao ili da probam drugacije???
A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Problem sa SQL-om???15.01.2009. u 16:56 - pre 185 meseci
OK, to je iz jedne tabele. Zakaci MDB sa tabelom i nekim razumnim podaicma, pa da vidimo.
 
Odgovor na temu

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Re: Problem sa SQL-om???15.01.2009. u 17:57 - pre 185 meseci
Ok @Zidar evo baza...
A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
Prikačeni fajlovi
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Problem sa SQL-om???15.01.2009. u 21:26 - pre 185 meseci
Evo:

Prvo napravi ovakav kveri (napravi ga bas ovako za pocetak, cut/paste odavde u SQL prozor):
Code:

SELECT RedniBrojO, Datum, Kolicina, PunRezervoar, VoziloID
FROM tblOtpremnica
WHERE (((Datum)>=#2/18/2008#) AND ((Datum)<=#3/25/2008#) AND ((VoziloID)="444-M-127"));


i nazovi ga qryPunjenjeGorivaZaVozilo. To je otprilike jedini kveri koji ces mozda morati da generises u kodu, ako bas zelis. Znas ono:

SET db = currentdb
SET qdef = db.QueryDefs ("qryPunjenjeGorivaZaVozilo")
strSQL = = "SELECT RedniBrojO, Datum, Kolicina, PunRezervoar, VoziloID "
strSQL = strSQL & " FROM tblOtpremnica "
strSQl = strSQL & "WHERE (((Datum)>=#2/18/2008#) AND ((Datum)<=#3/25/2008#) AND ((VoziloID)="444-M-127"));"

Ovaj poslednj strSQL = strSQL & ... naravno da nije ispravan ali verujem da to znas da izvedes i sam.

Onda dodje jedno

qdef.SQL = strSQL i gotovo, kroz kod si napravio query.

Dalje je lako: napravis dva kverija, koji ti racunaj datm prvog DA i poslednjeg DA u kveriju qryPunjenjeGorivaZaVozilo:

qryDatumPoslednjegPunogRezervoara:
Code:

SELECT Max(qryPunjenjeGorivaZaVozilo.Datum) AS MaxOfDatum
FROM qryPunjenjeGorivaZaVozilo
WHERE (((qryPunjenjeGorivaZaVozilo.PunRezervoar)="DA"));



qryDatumPrvogPunogRezervoara:
Code:

SELECT Min(qryPunjenjeGorivaZaVozilo.Datum) AS MinOfDatum
FROM qryPunjenjeGorivaZaVozilo
WHERE (((qryPunjenjeGorivaZaVozilo.PunRezervoar)="DA"));


Ovo su fiksni kveriji, napravis ih jednom i ne diras vise.
Kad imas sve obvo, ond aje sabiranje jednostavno:

qrySumaKolicine:
Code:

SELECT qryPunjenjeGorivaZaVozilo.VoziloID, Sum(qryPunjenjeGorivaZaVozilo.Kolicina) AS SumOfKolicina
FROM qryPunjenjeGorivaZaVozilo, qryDatumPoslednjegPunogRezervoara, qryDatumPrvogPunogRezervoara
WHERE (((qryPunjenjeGorivaZaVozilo.Datum)<=[MaxOfDatum] And (qryPunjenjeGorivaZaVozilo.Datum)>[MinOfDatum]))
GROUP BY qryPunjenjeGorivaZaVozilo.VoziloID;



Taj ti daje rezultat koji trazis. Pretpostavka je da se vozilo ne puni dva oputa u toku jednog dana, ili bar da ne dobija DA dva puta u istom danu. Poslednji kveri jednostavno sabere sve dane osim prvoga (to je bilo kad je bio prvi put rezervoar pun, DA)

Cisto za razumavanje sta se desava, ostavio sam kveri qrySumaKolicine_Kontrola. Taj pokazuje sta se zaista sabira kverijem qrySumaKolicine.

Da sumiramo:
1. sagradi SQL izraz za kveri qryPunjenjeGorivaZaVozilo. Mzoe iz koda, a moze i na druge nacine, pomocu tabele parametara na primer. u tom slucaju nema koda, a kao sto znamo 'the best code is no code at all'.

2. procitaj rezultat kverija qrySumaKolicine. Obican Dlookup("SumOfKolicina","qrySumaKolicine") zavrsava posao.

Zakacio sam tvoju istu bazu sa dodatkom 5 kverija. 4 su radni a peti za ilustraciju.

Dodao sam i tabelu tblVoziloDatumOdDatumDo, koju nisam koristio nigde. To je tabela paramateara za ovaj zadatak. Ako tamo uneses parametre, onda moze kveri qryPunjenjeGorivaZaVozilo da postane fixan, ako mu se doda ova tabela i parametri se citaju odande. I nema qdef, currentdb i ostale kerefeke. Ali, ako volis da programiras, neka, dobro je za umnu gimnastiku.

Prikačeni fajlovi
 
Odgovor na temu

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Re: Problem sa SQL-om???17.01.2009. u 07:21 - pre 184 meseci
@Zidar hvala ti na pomoci, to je to. Sorry sto nisam odmah odg. ali bio sam zauzet, ali ovo radi odlicno. Samo se jos trebamo dogovoriti gdje da odemo na pivo!!!!!!
Hvala jos jednom pozdrav!
A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
 
Odgovor na temu

[es] :: Access :: Problem sa SQL-om???

[ Pregleda: 2921 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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