[ Gjoreski 001 @ 07.06.2010. 10:32 ] @
Pozdrav svima.
Imam edno query koe treba da ima uslov od funkcija koja dava rezultat "10 or 20 or 31" i taka redosledno kade sto broevite se edinstveni i se od ID poleto.
Koga ke ja dodadam funkcijata vo Queryto kako uslov mi dava poraka Data type mismatch in criteria expresion .
Dajte nekoj predlog
[ SLOJ.1973 @ 07.06.2010. 11:30 ] @
Okači primer.
[ Gjoreski 001 @ 07.06.2010. 12:04 ] @
eve primer

[ SLOJ.1973 @ 07.06.2010. 14:00 ] @
Grešku prijavljuje jer ti je polje navedeno u query-ju ID_Naracka tipa broj,a polje txtNaracki je tipa tekst.Nemam sada vremena,pokušaću kasnije da odradim primer.
[ Zoran.Eremija @ 07.06.2010. 14:35 ] @
Mozda je ovo resenje...
[ Zidar @ 07.06.2010. 14:43 ] @
Nece moci ovako. Ti hoces da se keru izvrsi za izabrane "Tekovni Naracki", one koje izaberes na listi. Znaci, kveri bi zigledao nekako ovako:

SELECT ...
FROM tblNaracki
WHERE Naracki_ID IN (21,22,23)

E, sad, ovaj uslov IN je promenljiv. Ne mozes ga poslati kveriju onako kako si zamislio. Moras da promenis ceo SQL izraz za taj kveri.


Moze na dva nacina:

A)Komplikovani nacin, s puno programiranja, tesko za debugging, ali ljudi to vole da rade. Ovako nekako:

1) Izaberes listu Naracki_ID, na formi

2) Napravis funkciju koja vraca strWhere, ovako:
Code:

"strWhere = "WHERE  tblNaracki.Izvrsena  = False 
         AND  tblNaracki.ID_Naracka IN ( 23, 22, 21, 20)
         AND tblNaracki.Data_Naracka  BETWEEN ( Now() - 1 ) AND ( Now() ) "


3) sastvi SQL izskaz za ceo kveri, ovako, u nekoj funkciji, strSQL():
Code:

strSQL = ""
strSQL = strSQL & "SELECT tblKomitenti.Komitent_Ime, " & vbCrLf
strSQL = strSQL & "       tblNaracki_Artikli.Artikal, " & vbCrLf
strSQL = strSQL & "       SUM(tblNaracki_Artikli.Kolicina) AS SumOfKolicina " & vbCrLf
strSQL = strSQL & "FROM   (tblKomitenti " & vbCrLf
strSQL = strSQL & "        INNER JOIN tblNaracki " & vbCrLf
strSQL = strSQL & "          ON tblKomitenti.ID_Komitent = tblNaracki.Komitent) " & vbCrLf
strSQL = strSQL & "       INNER JOIN tblNaracki_Artikli " & vbCrLf
strSQL = strSQL & "         ON tblNaracki.ID_Naracka = tblNaracki_Artikli.Broj_Naracka " & vbCrLf
strSQL = strSQL & strWhere & vbCrLf
strSQL = strSQL & "GROUP  BY tblKomitenti.Komitent_Ime, " & vbCrLf
strSQL = strSQL & "          tblNaracki_Artikli.Artikal " & vbCrLf
strSQL = strSQL & "ORDER  BY tblNaracki_Artikli.Artikal"


4. promeni SQL za tvoj kveri, ovako
Code:

dim db as DAO.Datbase
dim qdef as DAO.Querydef

set db = currentdb()

set qdef = db.querydefs("qryNaracki_Komitenti")

qdef.SQL = strSQL()


5. Sad si spreman da odradis Docmd.OpenQuery "qryNaracki_Komitenti"


Ima i prostije resenje, bez programiranja. To u sledecem postu, dok vidim sta je lakse, da se opisuje resenje ili da ga samo napravim pa gledaj.



[Ovu poruku je menjao Zidar dana 07.06.2010. u 16:16 GMT+1]
[ Zidar @ 07.06.2010. 15:15 ] @
Vidim da ti je Zoran dao elegantno resenje. Umesto kverija, otvara formu koja filtrira ID_Naracka. Na isti nacin moze da se umesto forme otvori report. I kod je minimalan. Svaka cast.

Evo i moje resenje, u principu slicno Zoranovom. Filtriranje se izvodi izvan kverija qryNaracki_Komitenti. Tu je glavni stos.

a) Zahteva se pomocna tabela, tblNaracki_Lista, koja se napuni filtriranim podacima
b) Lista na formi se izbaci, umesto nje se stavi subforma koja dolazi iz pomocne tabele
Na subformi se cekiraju rekordi koje zelis da vidis u kveriju
c) pomocna tabela se ubaci u kveri qryNaracki_Komitenti, uz uslov tblNaracki_Lista.Izabran = TRUE

Jedini kod je formin OnOpen event, gde se tabela tblNaracki_Lista prvo isprazni pa napuni filtriranim podacima (Izvrsena = False , Data_Naracka BETWEEN Now() - 1 AND Now()

Kveri qryNaracki_Komitenti sada mozes da upotrebis kako hoces, kao osnovu za izvestaj ili formu.