[ unisoft @ 11.08.2010. 14:35 ] @
Imam jedan program koji se zove prebacivanje MS Access baze na MS SQL Server :) ? Problem sa javlja kada korisnik upise svoje korisnicko ime i sifru na login formi i pritisne OK. Kada pritisne OK button u kodu postoje 3 promenljive. Prve dve su tipa string a treca je tipa date. Promenljiva cuva strUlazImeP korisnicko ime, u promenljivu strUlazSifraP cuva se sifra korisnika, a u promenljivoj datUlazVremeDatumP se cuva vreme kada je korisnik kliknuo na button ok (ovo vreme sam dobio pomocu funkcije Now()).

Code:

INSERT INTO Podaci (datum,) VALUES ('03/04/1988')
INSERT INTO Podaci (datum,vreme) VALUES ('03/04/1988','23:32;13')


u prva dva slucaja radi ali u trecem nece.
Code:

INSERT INTO Podaci (datum,vreme,vremedatum) VALUES ('03/04/1988','23:32;13','03/04/1988 23:32:13')

Moj VB6 kod izgleda ovako.
Code:

    mdiGlavna.strUpit = "INSERT INTO tblUlazakPokusaj (Korisnik,Šifra,[Vreme i datum]) VALUES ("
    mdiGlavna.strUpit = mdiGlavna.strUpit & "'" & mdiGlavna.strUlazImeP & "',"
    mdiGlavna.strUpit = mdiGlavna.strUpit & "'" & mdiGlavna.strUlazSifraP & "',"
    mdiGlavna.strUpit = mdiGlavna.strUpit & "#" &  mdiGlavna.datUlazVremeDatumP & "#)"
    
    mdiGlavna.acnKonekcija.Execute mdiGlavna.strUpit

promenljiva datUlazVremeDatumP cuva vrednost iz funkcije Now().
Visual Basic 6 mi prijavi sledecu gresku kada kliknem na OK button login forme
Code:

Run-time error '-2147217900(80040e14)':
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '15'.


Program je napisan u Visual Basic 6 SP6.

[Ovu poruku je menjao unisoft dana 11.08.2010. u 15:49 GMT+1]
[ Fedya @ 11.08.2010. 15:45 ] @
Generisanje upita nadovezivanjem stringova nikad nije dobra ideja (SQL Injection i sl), no to nije tema. Sudeci po gresci koju si dobio prepostavljam da nadovezivanje stringova nije dobro proslo (fali ti apostrof ili imas viska). Izprintaj upit koji ti se generise pre slanja u bazu (ili prepisi taj VB code da koristi da koristi parametre).
[ unisoft @ 11.08.2010. 16:18 ] @
Upit pre slanja u bazu izgleda ovako.
Code:

INSERT INTO tblUlazakPokusaj (Korisnik,Šifra,[Vreme i datum]) VALUES ('admin','admin',#11082010 17:09:14#)


[ Fedya @ 11.08.2010. 16:26 ] @
Pa #11082010 17:09:14# tesko da ce ti prodje kao validan datum. Preformatiraj ga i nemoj prosledjivati sa #datum# nego 'datum'.

Znaci da upit izgleda nesto kao:

Code:
INSERT INTO tblUlazakPokusaj (Korisnik,Šifra,[Vreme i datum]) VALUES ('admin','admin','11/08/2010 17:09:14')
[ unisoft @ 11.08.2010. 16:50 ] @
Problem je resen, hvala Fedya.

Trebalo je samo fiksirati date promenljivu sa jednim apostrofom na pocetku i kraju '.
Code:

INSERT INTO tblUlazakPokusaj (Korisnik,Šifra,[Vreme i datum]) VALUES ('admin','admin','11/08/2010 17:09:14')


Ovo radi ali zar se kod SQL Servera ne formatiraju sa 'stringovi, a # datum. Zasto su onda pravili u SQL Serveru polje tipa datetime.
[ Fedya @ 11.08.2010. 17:09 ] @
Parametar prosledjujes kao string ali on i dalje zadrzava osobine datuma. Npr mozes reci DATEADD(20, dd, tvojdatum) i SQL ce ti korektno dodati 20 dana bez potrebe da pises kod koji ce proveravati koliko mesec ima dana i sl. Takodje sortinje po datumu ce raditi kako treba, sto ne bi bio slucaj ako bi ga snimio kao string...
[ unisoft @ 11.08.2010. 17:28 ] @
Veoma zbunjujuce... ali dobro ako je tako.