[ Emerald_MG @ 27.11.2007. 19:58 ] @
Potrebna mi je pomoć oko SQL sintakse za SQL Server 2005 express

Sledeća sintaksa u Server Management Studiju radi ono što treba i vraća recordsetove sa određenim vrednostima (View):

Code:

SELECT     dbo.KL_detalji.NalogID, dbo.Profili_S.Naziv, dbo.Profili_S.ProfilID
FROM         dbo.KL_detalji INNER JOIN
                      dbo.Profili_S ON dbo.KL_detalji.ProfilID = dbo.Profili_S.ProfilID INNER JOIN
                      dbo.KrojnaLista ON dbo.KL_detalji.NalogID = dbo.KrojnaLista.IzlazID
GROUP BY dbo.KL_detalji.NalogID, dbo.Profili_S.Naziv, dbo.Profili_S.ProfilID
HAVING      (dbo.KL_detalji.NalogID = 1)



Kada ovu sintaksu koristim u okviru aplikacije u VB6 u obliku Stringa:

Code:

MySQL = "SELECT KL_detalji.NalogID, Profili_S.Naziv, Profili_S.ProfilID " & _
        "FROM KL_detalji INNER JOIN " & _
        "Profili_S ON KL_detalji.ProfilID = Profili_S.ProfilID INNER JOIN " & _
        "KrojnaLista ON KL_detalji.NalogID = KrojnaLista.IzlazID " & _
        "GROUP BY KL_detalji.NalogID, Profili_S.Naziv, Profili_S.ProfilID " '& _
        "Having (KL_detalji.NalogID = 1)"

adoPrimaryRS_1.Open MySQL, DbConnect, adOpenStatic, adLockOptimistic
If adoPrimaryRS_1.RecordCount > 0 Then


ne prijavljuje nikakvu grešku ali ni ne vraća nikakvu vrednost (RecordCount je -1).

Kada izbacim deo od Having - ista stvar se dešava, tek ukoliko se izostavi deo koji ide od GROUP BY dobijam određeni broj
u vrednosti RecordCount

Zahvalan sam na bilo kojoj ideji, jer u pitanju potreba za brzom migraciom baze iz Accessa na SQL 2005 express


Edit: slovo
[ Fedya @ 28.11.2007. 10:23 ] @
Koju ti gresku izbaci?
[ Emerald_MG @ 30.11.2007. 02:31 ] @
Fedya,

kao što sam i napisao ne pokazuje nikakvu grešku već jednostavno vrednost vraćenog recordseta je -1, dakle nema vraćenih zapisa.

[ Koce @ 30.11.2007. 12:44 ] @
zasto si pisao "Having (KL_detalji.NalogID = 1)" kad to nije grupisuce polje? Stavi ga u where, pa probaj
[ Emerald_MG @ 01.12.2007. 21:38 ] @
Citat:
Koce: zasto si pisao "Having (KL_detalji.NalogID = 1)" kad to nije grupisuce polje? Stavi ga u where, pa probaj



Savet sa WHERE ne pomaže. Rezultat je da ne prijavljuje nikakvu grešku i upit i dalje vraća Recordset bez vrednosti tj RecordCount pokazuje -1.

Sam recordset je otvoren sa adOpenKeyset, adLockOptimistic ali probao sam i sa adOpenStatic (U accessu znam da pravi problem adOpenForwardOnly
i recordset.RecordCount)

Neke ideje ili predlozi pored ovog pomogli bi mi jer sam zaglavljen trenutno u radu.
[ goranvuc @ 01.12.2007. 23:00 ] @
Verovatno je problem u kombinaciji kursora i lockingmode-a.

Probaj standardni:

Code:

adoPrimaryRS_1.Open MySQL, DbConnect, adOpenStatic, adLockReadOnly
[ steve585 @ 02.12.2007. 09:10 ] @
Vidim da u kodu imas MySQL, e sada, zvuci bedasto, ali da li si u medjuvremenu bazu prebacio sa MS SQL u MySQL?
[ chachka @ 02.12.2007. 13:59 ] @
VB promenljiva se zove 'MySQL', ali ne i server :)
[ steve585 @ 02.12.2007. 14:51 ] @
mozes li onda okaciti tabele navedene u upitu. bice lakse.
[ goranvuc @ 02.12.2007. 15:14 ] @
Ma ne treba da kaci tabele, upit se izvrsava - znaci da je dobar. Proveri jos i da li si postavio kljuceve za tabele.
[ Emerald_MG @ 03.12.2007. 20:47 ] @
Citat:
goranvuc: Ma ne treba da kaci tabele, upit se izvrsava - znaci da je dobar. Proveri jos i da li si postavio kljuceve za tabele.


Možda je rešenje u ovome ali nisam siguran šta treba da uradim. Baza je jednostavno konvertovana iz MS Accessa na SQL 2005.

U bazi (ranijoj i novoj na SQL serveru) koriste se samo tabele koje su imale određene međusobne relacije.

Napominjem da mnoge stvari (2/3 koda tj. upita) rade bez problema bez ikakvih prepravki koda, osim stringa konekcije i baze na koju se VB6 kači.
[ goranvuc @ 03.12.2007. 20:54 ] @
Ako si samo konvertovao (Import Database) onda to jeste to, jer pri importu wizard ne postavlja kljuceve, vec to moras sam. Dakle stavi primarne kljuceve i resen ti je problem
[ Koce @ 28.12.2007. 15:03 ] @
ma meni to i dalje bas cudno, jel mozes da uhvatis bas taj upit iz aplikacije kroz profiler (ili kroz debug) pa da pustis njega nad bazom, nema logike da vraca razlicite vrijednosti...