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

Datumska promjenljiva u vba sql queryu

[es] :: Access :: Datumska promjenljiva u vba sql queryu

[ Pregleda: 3534 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

konstantin

Član broj: 17262
Poruke: 132
*.com



Profil

icon Datumska promjenljiva u vba sql queryu26.03.2004. u 14:06 - pre 223 meseci
Imam formu na koju sam dovukao Active X calendar. Na formi imam i txtDatIzb koji se azurira sa kalendara. Klikom na cmdOK vrijednost txtboxa se smijesta u dat. promjenljivu i poziva se funkcija za import excelovog fajla. Kod mi puca na liniji db.execute strSql i javlja mi gresku run-time 3075 synthax error in query expression '0:00:00WHERE tempPok.Datum Is Null'. Nije mi jasno kako da mi promjenljiva dat ima vrijednost 0:00:00?

Kod forme:
Public Sub cmdOK_Click()
Dim dat As Date
dat = CDate(Me.txtDatIzb)
Call UcitajPok
DoCmd.Close
End Sub

Kod funkcije:
Function UcitajPok()
Dim ul As String
Dim dat As Date
Dim db As Database

Dim strSql As String


Set db = CurrentDb



ul = InputBox("Unesite putanju do datoteke koju importujete(txt)", "Import podataka")

'On Error GoTo gres

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "tempPok", ul
' DoCmd.TransferSpreadsheet, "POK", "pokretni", ul
strSql = "UPDATE tempPok Set tempPok.datum = " & dat & "WHERE tempPok.datum Is Null;"
db.Execute strSql
db.Execute "INSERT into pokretni (add,naziv,staro,novo,razlika,datum) select f1,f2,f3,f4,f5,datum from tempPok;"
db.Execute "DELETE pokretni.* from pokretni WHERE pokretni.add Is Null;"
db.Execute "UPDATE pokretni SET pokretni.staro = 0 where pokretni.staro Is Null;"
db.Execute "DELETE tempPok.* from tempPok ;"
GoTo kraj

gres:
MsgBox "Putanja nije ispravno unijeta!", vbCritical, "Poruka"
kraj:
Exit Function

End Function
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.eqao.com



+79 Profil

icon Re: Datumska promjenljiva u vba sql queryu26.03.2004. u 14:16 - pre 223 meseci
Prva greska je u strSQL. Ti imas:
strSql = "UPDATE tempPok Set tempPok.datum = " & dat & "WHERE tempPok.datum Is Null;"

a treba

strSql = "UPDATE tempPok Set tempPok.datum = #" & dat & "# WHERE tempPok.datum Is Null;"

Objasnjenje: 1) datum u kveriju mora da bude ogranicen sa #, 2) pre WHERE mora da bude jedan space. Primer valjanog SQL stringa:

UPDATE tempPok SET Datum = #11/05/2003# WHERE datum IS NULL"

#11/05/2003# je 5 Novembar a ne 11 Maj. Access interno sve datume cita u americkom formaty mm/dd/yyyy

Ispravi ovo pa probaj da vidis da li ce da radi korektno.

:-)

 
Odgovor na temu

konstantin

Član broj: 17262
Poruke: 132
*.com



Profil

icon Re: Datumska promjenljiva u vba sql queryu26.03.2004. u 19:43 - pre 223 meseci
Zidar, hvala na opasci vezanoj za # literal i dat. promjenljivu. Kod se izvrsi medjutim u tabelu pokretni u polje datum upisuje 30.12.1899. Probao sam sa :
dat = CDate(Format(Me.txtDatIzb, "dd.mm.yyyy")) i druge formate ali uvijek upise isto. U regional settings mi je locale serbian(latin) i format za datum dd.mm.yyyy.
???
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Datumska promjenljiva u vba sql queryu26.03.2004. u 21:29 - pre 223 meseci
Datum stavi izmedju jednostrukih navodnika, bar ja tako radim sa Accessom a zapiši ga u formatu yyyy-MMM-dd HH:mm:ss kada je jako teško pogrešiti. Primer:

UPDATE .... SET ... = '2004-MAR-27 18:13:22' ....

Access će uvek pravilno pročitati ovako napisan datum koji pošalješ, jer zabune zaista nema: godina je sa 4 cifre, a mesec i dan se razlikuju "iz aviona".

Da li je SQL izraz u strSQL ispravno konstruisan? Tj. kako izgleda strSQL pre nego što se izvrši?
Takođe primeti da je Zidar preporučio mm/dd/yyyy a ne mm.dd.yyyy, te je možda upotreba . umesto / deo problema? I ponovo, preporučio ti je mesec pa dan, a ne obrnuto... Ipak, najbolje je ići prvo sa godinom, pa mesec, pa dan.
Commercial-Free !!!
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.eqao.com



+79 Profil

icon Re: Datumska promjenljiva u vba sql queryu26.03.2004. u 21:35 - pre 223 meseci
CITAT
ul = InputBox("Unesite putanju do datoteke koju importujete(txt)", "Import podataka")

'On Error GoTo gres

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "tempPok", ul
' DoCmd.TransferSpreadsheet, "POK", "pokretni", ul
strSql = "UPDATE tempPok Set tempPok.datum = " & dat & "WHERE tempPok.datum Is Null;"
KRAJ CITATA

Za gradjenje strSQL koristis promenljivu dat (date), kojoj nisi dodelio vrednost. Mislim da dat treba da bude string tipa, a pre gradjenja strSQL treba da napises

dat = Format(Me.txtDatIzb, "mm.dd.yyyy")

Ne treba ti CDat ako je dat string tipa, Format vraca string. Ako ostavis dat kao Date tip, onda probaj

dat = cdat(Me!txtDatIzb), a u strSQL stavi Format(dat, "mm.dd.yyyy").
strSQL ti je string i pozeljno je da svi 'sabirci' budu string tipa.

Nisam tu do ponedeljka.

:-)
 
Odgovor na temu

konstantin

Član broj: 17262
Poruke: 132
*.com



Profil

icon Re: Datumska promjenljiva u vba sql queryu27.03.2004. u 22:21 - pre 223 meseci
Ne ide ni sa formatiranjem datuma koje ste mi preporucili. Pokrenuo sam ovo u debug modu i uvjerio se da dat promjenljiva u kodu forme iz koje se poziva funkcija nema nista sa dat promjenljivom definisana unutar funkcije. Vrijednost dat promjenljive u toku izvrsenja je 0:00:00 i vjerovatno zato nakon azuriranja dobijem datum 30.12.1899.
Problem bi rijesio sa nepozivanjem funkcije, nego prosirivanjem procedure forme za one linije koda iz funkcije. Medjutim mene inace interesuje kako proslijediti promjenljivu (definisanu u proceduri forme) nekoj funkciji koju pozivam iz te procedure.
Znaci pitanje je kako da proslijedim dat iz koda forme(koji ima zeljenu vrijednost) u samu funkciju. Mislio sam da ce Public Sub iz forme biti dovoljno...
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Datumska promjenljiva u vba sql queryu27.03.2004. u 23:49 - pre 223 meseci
Npr. imas proceduru:

Public Sub UpdateMyTable( ByVal broj As Integer )

MessageBox( broj )

End Sub


E sad ovu proceduru pozivaš sa drugog mesta sa npr.:

Dim x As Integer

x = 21
UpdateMyTable x

što će da pozove proceduru i "broj" će da ima vrednost koja je prosleđena (x, a to je 21). Slično je i za funkcije, samo što iste vraćaju vrednost, a Sub ne.
Naravno pazi da budu istog tipa ( broj As INTEGER i Dim x as INTEGER )...


Commercial-Free !!!
 
Odgovor na temu

konstantin

Član broj: 17262
Poruke: 132
*.com



Profil

icon Re: Datumska promjenljiva u vba sql queryu28.03.2004. u 09:59 - pre 223 meseci
degojs,
to mi je jasno, ali kako mozes da vidis u mom 1.postu, procedura forme se pokrece nakon eventa CLICK na komandnom dugmetu OK!
 
Odgovor na temu

konstantin

Član broj: 17262
Poruke: 132
*.com



Profil

icon Re: Datumska promjenljiva u vba sql queryu28.03.2004. u 10:51 - pre 223 meseci
Rijesio sam problem.
Funkciji UcitajPok dodijelio sam argument:
Function UcitajPok(dat As Date)
ali sam morao da u gradjenju strSQL upotrijebim format mm-dd-yyyy tj.:
strSql = "UPDATE tempPok Set tempPok.datum = #" & Format(dat, "mm-dd-yyyy") & "# WHERE tempPok.datum Is Null;"
Nakon toga sve radi i upisuje datum u odgovarajucu kolonu kao dd.mm.yyyy bas kako je u regional settings.Ustvari me je totalno zbunio famozni format mm-dd-yyyy.

U svakom slucaju hvala Vam obojici na sugestijama!
 
Odgovor na temu

kloktor
Velimir Milosavljevic
Kosjeric

Član broj: 18093
Poruke: 56
*.ptt.yu



+2 Profil

icon Re: Datumska promjenljiva u vba sql queryu30.03.2004. u 09:07 - pre 223 meseci
Malo kasno sam se ukljucio, ali nadam se da ce vam koristiti:
Kod rada sa datumima i SQL-om koristi se funkcija BuildCriteria koja iz upotrebljivog stringa ili datuma vraca oblik potreban za SQL. Primer:

BuildCriteria("tblTasks.Kraj ", dbDate, "Between " & Datum1 & " And " & Datum2)

gde su promenljive datum1 i datum2 tipa Date/Time ili Text (odnosno string).

Pozdrav
Klo
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.eqao.com



+79 Profil

icon Re: Datumska promjenljiva u vba sql queryu30.03.2004. u 14:50 - pre 223 meseci
Hvala Kloktore! Odlicna ideja. BuildCriteria je malo poznata i cesto zanemarena funkcija. Ocigledno je da majstori imaju svoje tajne. Hvala sto ih delis s nama.

:-)

Moze da se koristi i nesto kraca funkcija.

Function Date4SQL(Date2Convert As Variant) As String
Date4SQL = "#" & Format(CVDate(Date2Convert), "mm/dd/yyyy") & "#"
End Function


Pozivati kao:

strSQL = "SELECT * FROM myTable WHERE myTable.myDate = " & Date4Sql(me!txtDate)


Kad smo vec kod SQL stringova, pored datuma i stringovi cesto zadaju probleme.
Na primer, treba sagraditi strSQL koji ce da vrati ovo":

SELECT * FROM myTable WHERE EmpName='Pera'

a 'Pera' je vrednost promenljive strName ili je u kontroli me!txtName. Cesta greska je:

strSQL = "SELECT * FROM myTable WHERE EmpName=" & strName
sto vraca rezultat
SELECT * FROM myTable WHERE EmpName=Pera (nedostaju navodnici oko Pera)

Treba pisati:
strSQL = "SELECT * FROM myTable WHERE EmpName='" & strName & "'"

Posto je ovo necitko i opet se lako gresi, predlazem funkciju

Function EnQuote(varString As Variant)
EnQuote = Chr$(34) & Nz(varString, vbNullString) & Chr$(34)
End Function

Koristiti kao:
strSQL = "SELECT * FROM myTable WHERE EmpName=" & EnQuote(strName )

Zamislite string:
strSQL = "SELECT * FROM myTable WHERE EmpName=" & EnQuote(strName )
& " AND myDate BETWEEN " & Date4Sql(me!txtDateFrom) & " AND "
& Date4Sql(me!txtDateFrom)

Mogucnost ovog tipa greska je nestala i iz koda je vrlo jasno sta se desava - kod je citljiviji nego da se hardkodiraju "'" i "#".

:-)




 
Odgovor na temu

[es] :: Access :: Datumska promjenljiva u vba sql queryu

[ Pregleda: 3534 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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