[ beginner @ 30.05.2004. 00:39 ] @
Pocetnik sam kada su u pitanju baze podataka, pa sam pomislio da bi bilo razumno da pocnem prvo sa SQL-om i prostijim upitima. Pretpostavljam da je problem koji mene muci trivijalan i da ste mozda vec odgovarali na slicna pitanja. Pokusao sam da nesto pronadjem ovde na sajtu, ali nisam uspeo, pa se nadam da mi necete zameriti ukoliko je pitanje vec bilo postavljeno.

Ovako...
Kreirao sam jednu (veoma prostu tabelu) u Access-u koja izgleda ovako i ima naziv NUMBERS:

ID A B
1 3.1415 4
2 -45 0.707
3 5 9
4 -57.667 42
5 15 55
6 -7.2 5.3
7 2 5

U Visual Studio-u sam kreirao Database Project i konektovao se na bazu (Accessov fajl koji
sadrzi pomenutu tabelu). Upiti koje sam postavljao (poceo sam po SAMS-ovoj knjizi SQL za 21 Dan)
su uglavnom radili, sve dok nisam poceo da koristim neke funkcije (f-je za datum, matematicke f-je)...

Tako, npr. kada zadam sledeci upit:

SELECT A, CEIL(A)
FROM NUMBERS

dobijem message box sa porukom:
Undefined function 'CEIL' in expression

Takodje za, npr., upit:
SELECT A, B, A MOD B
FROM NUMBERS
dobijam kao rezultat:
A B Expr1002
3.1415 4 3
-45 0.707 0
5 9 5
-57.667 42 -16
15 55 15
-7.2 5.3 -2
2 5 2

sto nije bas logicno (kao rezultat primera u knjizi dobijene su prave vrednosti, a ne zaokruzene
na citav broj). Takodje za neke druge upite dobijam celobrojne promenljive u rezultatu, a ne bi trebalo da budu.
Primeri u knjizi radjeni su za ORACLE, implementacije mogu da se razlikuju, za funkcije koje
pokusavam da koristim (a opisane su u knjizi) prethodno nadjem adekvatne za Microsoft-ovu implementaciju.

Ne znam sta radim pogresno, slicne poruke (da je funkcija nedefinisana) ili pogresan (celobrojni) rezultat
dobijam cak i kada iz MSDN-a sa copy/paste pokusavam da postavim neki upit.

Nadam se da ce neko imati dovoljno strpljenja da mi kaze u cemu je problem.
Hvala unapred.

P.S.
Znam da tabele ruzno izgledaju, ali ne radi mi tab kada pisem poruku. Posto su jednostavne, pretpostavljam da nece biti problem da vidite sta je u kojoj koloni.
[ stanks @ 30.05.2004. 10:25 ] @
Kojeg su tipa podaci u stupcu A i B? Mozda si stavio krivi tip podataka (ne pada mi nista drugo na pamet :( )

stanks
[ Zidar @ 31.05.2004. 14:05 ] @
Ako si povezao Access bazu, onda mozes da koristis samo SQL upite koji rade u Access varijanti SQL-a. Access SQL i Transact SQL koji ide uz MS SQL server nisu identicni. I ejdan i drugi imaju funkcije koje onaj drugi nema, a imaju i funkcije koje se isto ili slicno ziovu ali rade razlicito.
Na primer:
1) Acces uopste nema funkciju CEIL (CEILING) (= najmanji integer veci od zadatog broja ?)
2) Funkcija MOD ne postoji u MS SQL 2000.

Na primer
Code:

SELECT CEILING(3.14) 

radi ispravno u MS SQL i vraca tacnu vrednost 4. U Accessu CEILING ne postoji.
Code:

SELECT 5 MOD 3

radi OK u Accesu i vraca 2 kao sto i treba. U mS SQL 2000 uopste ne radi.

Ako hoces da naucis kako radi SQL nemoj odmah da upotrebljavas matematicke i inzenjerske funkcije, mogu da te zbune. Pisi lepo izraze tipa
Code:

SELECT AuName FROM Authors WHERE AuName LIKE 'B*' 

Napisano radi u Accessu, a za MS SQL ti treba nesto kao
Code:

SELECT AuName FROM Authors WHERE AuName LIKE 'B%' 


Pogledaj u nekoj knjizi sinaksu za SQL dijalekt za konkretan program. Ako ucis od primera do primera, samo ces da se zbunis.

I nije valjda da verujes da se za 21 dan moze nauciti bilo koji programski jezik?

:-)

[ beginner @ 02.06.2004. 00:05 ] @
Zidaru,
hvala ti na odgovoru, mada nije sasvim resio moje probleme; napravio sam i SQL Bazu, konektovao se preko Query Analizer-a, i opet onaj CEIL ne prolazi...

Inacce, ne znam otkud ti ideja da ja mislim kako se mozze neki programski jezik nauciti za 21 dan (makar i SQL smatrao programskim jezikom ;) )? Ako je zbog knjige koju sam pomenuo, trebalo bi prvo da je procitas, pa da je kritikujes. Naslov je samo marketinski potez, knjiga ima 21 poglavlje koje tesko da mozes ljudski i da procitas za 21 dan. A i mnogi je preporucuju.

Hvala ti u svakom slucaju, pretpostavljam da si u pravu i da ove funkcije zavise od implementacije, pa da zbog toga ne prolaze.

P.S.
Mada, ja sam mislio da se upiti bazi prosledjuju preko nekih drajvera (npr. ODBC), pa da nije bitno da li je iza Access-ov file ili SQL 2000. Izgleda da ipak nije tako.
[ Zidar @ 02.06.2004. 14:13 ] @
Izvinjavam se za komentar o knjizi :-) Acces dialekt SQL nije jezik, ali ono sto imas u MS SQL bogami jeste. ima funkcije, procedure uskoro ce imati i report generator (pozajmljen od Accessa i ubacen u sledecu verziju MS SQL, Yucon, jesen 2004). Nemas forme za unos podataka, ali zato imas Accces, VB, web itd.

Cak i ako linkujes tabele iz MS SQL u Acces i u napravis Access query, taj query mora da sledi Access SQL sintaksu. Za linkovanu tabelu Access misli da je Access tabela. Sta tebi treba jeste Accessov PASS TROUGH query. Pass-trough query se pise u SQL dijalektu koji podrzava externa baza - u tvom slucaju MS SQL. Tabele koje se koriste u pass-through query ne moraju ni da budu likovane. Napises SQL statement koji se moze izvrsiti na MS SQL, sa pass through ga posaljes SQL serevru. Onda MS SQL izvrsi kveri (na Access) i vrati ti rezulat. Vidi u Access helpu o pass through kverijima. Ako ti je cilj samo da naucis SQL naredbe, oda onu sa CEILINIG funkcijom izvrsi u MS SQL - upotrebi SQL Query Analyzer tool i bice sve OK.

Srecan rad!

:-)

[ tweeester @ 02.06.2004. 14:53 ] @
Cini mi se da jos uvek pokusavas da upotrebis f-ju CEIL koja ne postoji, vec treba upotrebiti CEILING ??

p.s. Upravo sam proverio na MS SQL 2000
[ goranvuc @ 03.06.2004. 23:38 ] @
Sto se tice MOD funkcije, ona vraca Integer vrednost, a njeni parametri su takodje Integer, sto znaci da ako ti pokusas: 22.66 MOD 20.33 rezultat ce biti 23 MOD 20 tj. 3 zato sto se parametri konvertuju u cele brojeve.
Ako probas 33333333333 MOD 222222222222 dobices gresku jer su parametri van opsega tipa Integer.
Dakle, nemoj da si malodusan, vec ako radis sa nekom funkcijom vidi kog su tipa njeni parametri i koji je njen ReturnType, pa polako.