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

Datum gdje gresim?

[es] :: Visual Basic 6 :: Datum gdje gresim?

[ Pregleda: 4087 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sija

Član broj: 19607
Poruke: 83
*.PPPoE-6793.sa.bih.net.ba.



+8 Profil

icon Datum gdje gresim?06.06.2007. u 18:43 - pre 205 meseci
Znam da je bilo na dosta mjesta tema vezanih za ovo ali stvarno ne mogu da svarim datum:
Code:
dim Datum as date
datum=dtpDatum.value
rsIspis.Open "select id from tbldnevni where datum= " & "# " & Format(Datum, "dd-mm-yyyy") & " #", cnnKonekcija, adOpenStatic, adLockOptimistic

ako postavim danasnji datum radi, bilo koji drugi nece a imam ih u bazi 100%

[Ovu poruku je menjao Sija dana 06.06.2007. u 20:42 GMT+1]

[Ovu poruku je menjao Sija dana 06.06.2007. u 20:42 GMT+1]
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?06.06.2007. u 19:31 - pre 205 meseci
Sve je dobro, osim space karaktera u "# " i " #". Naravno, ne bi bilo lose da koristis Access-ov native format "MM/dd/yy" koji ti prolazi uvek bez obzira na lokalna podesavanja. Kao sto si primetio, ne treba za mesece koristiti "mm" jer se to odnosi na minute.

Takodje ne bi bilo lose da kod stavljas u [code] tagove.
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.PPPoE-6793.sa.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?06.06.2007. u 19:49 - pre 205 meseci
O.K. Izvinite sto nisam stavio tagove ali od ovoga me vise glava zabolila. Evo sta sam uradio:
Kod unosa u bazu imam ovaj kod za format datuma:
Code:
rsDodaj.Fields("datum").Value = Format(dtpDatum.Value, "dd-mm-yyyy")


i u bazi mi je u formatu npr. 20.06.2007

Sada kada ucitavam okrenuo sam dan i mjesec:
Code:
rsIspis.Open "select id from tbldnevni where datum=" & "# " & Format(Datum, "MM-dd-yyyy") & "#", cnnKonekcija, adOpenStatic, adLockOptimistic


i sve radi. Ne razumijem zasto nece da ucita na isti nacin kao i kod upisa? Da li da i kod upisa da koristim
Code:
Format(Datum, "MM-dd-yyyy")
?

[Ovu poruku je menjao Sija dana 06.06.2007. u 21:10 GMT+1]
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?06.06.2007. u 20:18 - pre 205 meseci
Pravis gresku kao i svojevremeno moj bivsi kolega koji me je "docekao" u jednoj od firmi u kojoj sam pre radio. U svim projektima, na milion mesta je upisivao datum isto kao ti, preko format funkcije.

Evo ti par razloga zasto to ne treba da radis:

1. Format funkcija je funkcija cija je povratnost tipa String, a ti upisujes u polje tipa Date
2. Kao posledica ovog pod 1, dolazi do konverzije iz stringa u date tip, a konverzija pri tom "gleda" na lokalna podesavanja, pa ce ti tako razlicita lokalna podesavanja davati razlicite "efekte", tj. prepustio si tacnost upisa sreci i Bogu.

Dakle, kada sastavljas SQL izraze za podatke iz Access-a, koristi "MM/dd/yyyy" format, kao sto sam ti i preporucio, a ne "dd-mm-yyyy" , kao ni "MM-dd-yyyy". Veruj mi da je to ispravan nacin, koji prolazi na svim regionalnim podesavanjima.

Kod upisa, umesto:
Code:

rsDodaj.Fields("datum").Value = Format(dtpDatum.Value, "dd-mm-yyyy")

koristi:
Code:

rsDodaj.Fields("datum").Value = dtpDatum.Value

a to ti je cak i jednostavnije
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.PPPoE-6793.sa.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?06.06.2007. u 20:45 - pre 205 meseci
Poslusao i ukinuo format kod upisa ali kada citam podatke "MM/dd/yy" ne radi, a kada koristim "MM-dd-yy" radi?

Izvini sto te maltretiram ali mi je stvarno cilj da jednom savladam.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?06.06.2007. u 20:48 - pre 205 meseci
Kako se manifestuje to tvoje "ne radi", tj. po cemu zakljucujes da ne radi? Javi gresku, ili sta?
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.PPPoE-6793.sa.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?06.06.2007. u 21:12 - pre 205 meseci
Na

Code:
If rsIspis.BOF = True  or rsIspis.EOF = True Then 


sve je "true" tj. ne nadje nista u bazi sa tim datumom, a kada upotrjebim "MM-dd-yy kod ucitavanja podataka onda pronadje u bazi datum.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?06.06.2007. u 21:23 - pre 205 meseci
Pa verovatno ti je to slucaj zamene dana i meseca. Posto si "skrt" na opisu problema, ulozicu jos malo zivaca i napora, pa te molim da mi odgovoris na par pitanja:

1. Da li ispitujes problem za datum koji je tipa "05.06.2007." tj. gde je moguce da je dan mesec, a mesec dan?
2. Kada pogledas taj zapis u bazi, sta tacno pise za njegovu vrednost i koji ti je "Short date" format na sistemu?

Ako je ono pod 1. tacno, probaj da upises zapis sa nekim datumom kod kog ne postoji mogucnost zamene, npr. 25.05.2007. (praznik mladosti za one sto su se kasnije rodili) pa onda probaj kod za taj datum.

Ako je sada sve u redu, verovatno si zahvaljujuci tom tvom "Format upisu" upisivao dane kod kojih je moguca zamena dana i meseca, ali obrnuto, tako da umesto da ti je u bazi "05.jun.2007." tebi je "06.maj.2007." pa ti SQL ne vraca nijedan podatak koji ocekujes.

Ukratko, proveri stvarnu vrednost datuma koji su ti upisani u bazu i koje ocekujes da ti vrati SQL pa ces videti da sam u pravu, a ceo problem je prouzrokovao taj tvoj nacin upisa, a jos gore je moglo biti da se kod izvrsavao na sistemu gde je neko drugo podesavanje, tj. moguce je i "pucanje" programa u odredjenim kombinacijama.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?06.06.2007. u 21:40 - pre 205 meseci
Hajde kad vec o ovome pricamo, da usput napomenem jos nesto od onog mog "biser kolege": Kada mu je trebao upis trenutnog datuma on je koristio funkciju Now() koja naravno upisuje trenutni datum, ali i trenutno vreme ;)

Onda se naravno desavalo da kada pozelis da izvuces neki periodicni izvestaj "ispadnu" prvi i poslednji dan iz izabranog perioda - jer sadrze i vreme u svojoj vrednosti, a da ne spominjem izvestaje "na dan" gde su sve vrednosti koje su bile upisane po njegovom stilu ispadale iz izvestaja.

Ako se neko u ovome prepoznaje, bolje nek sto pre ispravi kod dok jos nije kasno. Kada vam treba trenutni datum koristite funkciju Date().
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.as58.ob.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?07.06.2007. u 09:40 - pre 205 meseci
Krenuti cu od kraja:

Citat:
a jos gore je moglo biti da se kod izvrsavao na sistemu gde je neko drugo podesavanje, tj. moguce je i "pucanje" programa u odredjenim kombinacijama.

Ja njega radim na dva razlicita sistema gdje su razlicita podesavanja. Jedan dio na poslu a drugi kod kuce.
Na oba sistema mi kada ispitujem datum sa "MM/dd/yy" pokazuje BOF i EOF true a kada koristim ""MM-dd-yy". Koristim Access 2007.
Znaci kod upisa mi radi sa"/" a kod ispitivanja moram da koristim"-"



Citat:

1. Da li ispitujes problem za datum koji je tipa "05.06.2007." tj. gde je moguce da je dan mesec, a mesec dan?
2. Kada pogledas taj zapis u bazi, sta tacno pise za njegovu vrednost i koji ti je "Short date" format na sistemu?


1. Pokusavam i i na jedan i na drugi nacin i uvjek isto kod upisa moze "/" a kod ispitivanja mora "-"

2."d.M.gggg" mi je na jednom sistemu, a na drugom "dd.MM.yyyy", a u bazi: "19.06.2007"

npr. U bazi trenutno imam 25.6.2007 dodao sam ga onako kako si mi ti rekao dtp.value. Kada ga trazim sa sa "MM/dd/yy" pokazuje BOF i EOF true a kada koristim ""MM-dd-yy" sve je ok.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?07.06.2007. u 10:07 - pre 205 meseci
Citat:
Sija:
Ja njega radim na dva razlicita sistema gdje su razlicita podesavanja. Jedan dio na poslu a drugi kod kuce.
"d.M.gggg" mi je na jednom sistemu, a na drugom "dd.MM.yyyy"

Pa to ti nisu razlicita podesavanja, na oba sistema ti je "." date separator. Igraj se malo pa stavi na jednom sistemu da ti je "/", a na drugom "-" date separator i javi kako ide

Molim te stavi deo koda jos jednom koji koristis za otvaranje rekordseta, i uploaduj tabelu u MDB-u (obrisi ostale tabele, a mozes obrisati i osetljive podatke iz test tabele, ali bar ostavi ove koje prijavljujes da si testirao), pa da resimo.

Pozdrav!
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?07.06.2007. u 10:36 - pre 205 meseci
Evo ti i mali primer da probas, da bi shvatio zasto koristiti date format sa "/" separatorom:

Code:

Print Format(DateSerial(2007, 5, 2), "MM/dd/yyyy")

'ovakav nacin ti uvek vraca format sa lokalnim separatorom, tj.
'za "." ti vrati "05.02.2007"
'za "-" ti vrati "05-02-2007"
'za "/" ti vrati "05/02/2007"

Print Format(DateSerial(2007, 5, 2), "MM-dd-yyyy")
'ili
Print Format(DateSerial(2007, 5, 2), "MM.dd.yyyy")
'vraca dobar format samo ako se "potrefi" sa separatorom na sistemu, tj. ako su isti
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.as58.ob.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?07.06.2007. u 10:56 - pre 205 meseci
Na formi imam DTPicker (dtpDatum) i jedan commandbutton:
Code:
Private cnnKonekcija As New ADODB.Connection

Private Sub KonektujSe()
cnnKonekcija.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\0606\baza.mdb;Persist Security Info=False"
End Sub


Private Sub Command1_Click()
Dim rsIspis As New ADODB.Recordset
Dim Datum As Date
Datum = dtpDatum.Value
rsIspis.Open "select id from tbldnevni where datum=" & "#" & Format(Datum, "MM-dd-yy") & "#", cnnKonekcija, adOpenStatic, adLockOptimistic
If rsIspis.BOF = True Or rsIspis.EOF = True Then
    Debug.Print "nema"
Else
    Debug.Print "ima"
End If

rsIspis.Close
End Sub

Private Sub Form_Load()
KonektujSe
End Sub


Taj kod mi radi. Ako "MM-dd-yy" promjenim u "MM/dd/yy" imam bof i eof, a ako promjenim u "MM/dd/yyyy" imam "syntax error"
Prikačeni fajlovi
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?07.06.2007. u 12:24 - pre 205 meseci
Prijatelju, u bazi imas i podatke iz jula, ne znam da li treba da postoje...

Inace, nije mi jasno kako ti to menjas:
Citat:
Sija: Ako "MM-dd-yy" promjenim u "MM/dd/yy" imam bof i eof, a ako promjenim u "MM/dd/yyyy" imam "syntax error"

tj. ako izmenis samo format string, ne bi trebalo da ti VB izbacuje "syntax error". Nesto ti tu debelo gresis u proceduri.

Kopiraj kod koji ti izbacuje tu gresku, ali bukvalno kopiraj - bez ikakvih izmena i stavi ovde.
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.as58.ob.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?07.06.2007. u 12:35 - pre 205 meseci
Ako gornji kod promenim u ovo pokazuje mi gresku:
Code:
Private cnnKonekcija As New ADODB.Connection

Private Sub KonektujSe()
cnnKonekcija.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\0606\baza.mdb;Persist Security Info=False"
End Sub


Private Sub Command1_Click()
Dim rsIspis As New ADODB.Recordset
Dim Datum As Date
Datum = dtpDatum.Value
rsIspis.Open "select id from tbldnevni where datum=" & "#" & Format(Datum, "MM/dd/yyyy") & "#", cnnKonekcija, adOpenStatic, adLockOptimistic
If rsIspis.BOF = True Or rsIspis.EOF = True Then
    Debug.Print "nema"
Else
    Debug.Print "ima"
End If

rsIspis.Close
End Sub

Private Sub Form_Load()
KonektujSe
End Sub


A ti datumi u tabeli su testni.Nisu vazni samo da vidim gdje gresim.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?07.06.2007. u 12:37 - pre 205 meseci
Na kojoj liniji se zaustavi i pokaze ti gresku?
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.as58.ob.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?07.06.2007. u 12:43 - pre 205 meseci
Na:
Code:
rsIspis.Open "select id from tbldnevni where datum=" & "#" & Format(Datum, "MM/dd/yyyy") & "#", cnnKonekcija, adOpenStatic, adLockOptimistic


Evo slika u prilogu sa greskom.
Prikačeni fajlovi
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?07.06.2007. u 12:48 - pre 205 meseci
Evo sad sam tek shvatio u cemu je stvar, nisam analizirao kod jer sam ti vec naveo da trebas da Accessu prosledis datum u native formatu, a koristenjem format funkcije ti prosledjujes u tvom lokalnom formatu (sa tackom) koji on ne prihvata.

Evo ti funkcija za univerzalni pristup (koju ja inace koristim, naravno malo siru verziju od ove):
Code:

Public Function SQLDate(ByVal DateValue As Date) As String
   Dim strDate As String

   strDate = Month(DateValue) & "/" & Day(DateValue) & "/" & Year(DateValue)
   SQLDate = "#" & strDate & "#"
         
End Function

A njena primena, kroz tvoj primer:
Code:

Private cnnKonekcija As New ADODB.Connection

Private Sub KonektujSe()
cnnKonekcija.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Download\baza\baza.mdb;Persist Security Info=False"
End Sub


Private Sub Command1_Click()
Dim rsIspis As New ADODB.Recordset
Dim Datum As Date
Datum = dtpDatum.Value
rsIspis.Open "select id from tbldnevni where datum=" & SQLDate(Datum), cnnKonekcija, adOpenStatic, adLockOptimistic
If rsIspis.BOF = True Or rsIspis.EOF = True Then
    Debug.Print "nema"
Else
    Debug.Print "ima"
End If

rsIspis.Close
End Sub

Private Sub Form_Load()
KonektujSe
End Sub


Dakle, kada ti treba datum za SQL upit, samo pozoves ovu funkciju.

Srecno, valjda ce ti ovo konacno resiti problem ;)
 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
*.as58.ob.bih.net.ba.



+8 Profil

icon Re: Datum gdje gresim?07.06.2007. u 13:03 - pre 205 meseci
Ma to je to. Drug moj kada budem prolazio kroz Novi Sad imas rucak od mene.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Datum gdje gresim?07.06.2007. u 13:10 - pre 205 meseci
Nema na cemu, sad mi je krivo sto sam te mozda malo zbunio, nismo se bas najbolje razumeli - do pred kraj.

U principu, imas sad opste resenje, koje ce ti pouzdano raditi u svim varijantama, a samu funkciju mozes prosiriti i za druge DBMS (MS SQL i sl.) tako da ne moras da menjas kod kad budes radio s tim bazama, a sama upotreba ti je laksa od dosadasnje.

Pozdrav!
 
Odgovor na temu

[es] :: Visual Basic 6 :: Datum gdje gresim?

[ Pregleda: 4087 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

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