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

Data Type mismatch

[es] :: Access :: Data Type mismatch

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rstevic
Rade Stevic
Senior IT Consultant, DBA
Database Forum
Stavanger, Norway

Član broj: 69135
Poruke: 150
*.vektor.net.



Profil

icon Data Type mismatch18.06.2008. u 08:19 - pre 193 meseci
Postovani,
u donjem kodu cete videti da pokusavam da reprogramiram jedan plan placanja i totako sto racunam novu kamatu itd, da sada ne ulazimo u te detalje nebitni su za pitanje.
Postavim prekidnu tacku negde u kodu i vidim da sve lepo racuna i radi sve do trenutka kada dodje do naredbe

DoCmd.RunSQL (StrSQL) i onda javi gore pomenutu gresku.
Ono sto ja mogu da zakljucim greska je negde u sintaksi i to na samom kraju where statementa i to mislim sa promenljivom Broj.
Ako je neko u stanju da vidi sta sam pogresio bio bih zahvalan, ja vise nista ne vidim.

odgovor = MsgBox("Da li ste sigurni?", vbYesNo, "Potvrda Reprograma")
If odgovor = vbYes Then

Prvidat = InputBox("Unesite datum prve rate koja treba biti reprogramirana, u formatu dd.mm.yyy", "PRVA RATA")
If Trim(Prvidat) = "" Then DoCmd.Close


' If DLookup("Datum_IL", "prodavac", "sifra_prodavca =" & Me.sifra_prodavca) < Date Then
'odgovor1 = MsgBox("Zastupniu je istekla Licenca", vbInformation, "OBAVESTENJE")
' GoTo a
End If

Novi3M = CDec(InputBox("Unesite novu vrednost za 3M", "NOVI EURIBOR ILI LIBOR"))
NovaMarza = CDec(InputBox("Unesite novu marzu za reprogram", "NOVA MARZA"))
NovaKamata = (Novi3M + NovaMarza) / 1200
PrvaRata = DLookup("Mesec", "dbo_Plan_P", "ID_Firme=" & Me.ID_Firme & "And ID_Projekta =" & Me.ID_Projekta & "And Datum ='" & Prvidat & "'")


Dim StrSQL As String
Dim StrSQL1 As String
Dim pocetak As Variant, kraj As Variant, razlika As Variant, Broj As Integer, BRRAT As Variant, MMM As Variant
Dim rata_Bez_PDV As Variant, DEP As Variant, Kamata As Variant, Kamata1 As Variant, Preos_Glav As Variant
Dim Preos_Glav1 As Variant, Preos_Glav2 As Variant, Glavnica As Variant, datum As String, Mes As Variant

Kamata = NovaKamata

Preos_Glav2 = DLookup("Preos_Glavn", "dbo_Plan_P", "ID_Firme =" & Me.ID_Firme & "And ID_Projekta =" & Me.ID_Projekta & "And Mesec=" & PrvaRata - 1)
BRRAT = DLookup("Broj_Rata", "dbo_Plan_P", "Mesec=" & PrvaRata & "And ID_Firme = " & Me.ID_Firme & "And ID_Projekta =" & Me.ID_Projekta)
MMM = DLookup("[3M_ID]", "dbo_Plan_P", "ID_Firme =" & Me.ID_Firme & "And ID_Projekta =" & Me.ID_Projekta & "And mesec=" & PrvaRata)

rata_Bez_PDV = Round(Pmt(Kamata, BRRAT + 1 - PrvaRata, -1 * Preos_Glav2, , MMM), 2)

'Ovaj StrSQL upisuje vrednost projekta u prvu vrstu
' DoCmd.SetWarnings False
' StrSQL = "insert into dbo_Plan_P (ID_Firme, ID_Projekta, ID_Referenta, Preos_Glavn)" _
' & " values([Forms]![PROJEKTI]![ID_Firme] ," _
' & "[Forms]![PROJEKTI]![ID_Projekta] ," _
' & "[Forms]![PROJEKTI]![Referent] , " _
' & "[Forms]![PROJEKTI]![Vred_Proj]);"
' DoCmd.RunSQL (StrSQL)
' DoCmd.SetWarnings True

' Ovaj StrSQL upisuje vrednost depozita u polja rata_bez_PDV i Glavnisa a u polje Preostala_Glavnica Finansiranu vrednost.
' DoCmd.SetWarnings False
' StrSQL = "insert into dbo_Plan_P (ID_Firme, ID_Projekta, ID_Referenta, Rata_Bez_PDV, Glavnica, Preos_Glavn)" _
' & " values([Forms]![PROJEKTI]![ID_Firme] ," _
' & "[Forms]![PROJEKTI]![ID_Projekta] ," _
' & "[Forms]![PROJEKTI]![Referent] , " _
' & "'" & DEP & "', " _
' & "'" & DEP & "', " _
' & "[Forms]![PROJEKTI]![Iznos_Finansiranja]);"
' DoCmd.RunSQL (StrSQL)
' DoCmd.SetWarnings True


pocetak = PrvaRata
kraj = DLookup("Broj_Rata", "dbo_Plan_P", "ID_Firme =" & Me.ID_Firme & "And ID_Projekta =" & Me.ID_Projekta & "And mesec=" & PrvaRata)
razlika = kraj - pocetak

DoCmd.SetWarnings False
For I = pocetak - 1 To razlika
Broj = 1 + I
Mes = Broj - 1
Preos_Glav1 = DLookup("Preos_Glavn", "dbo_Plan_P", "ID_Firme =" & Me.ID_Firme & "And ID_Projekta =" & Me.ID_Projekta & " And Mesec=" & Mes)
Kamata1 = Preos_Glav1 * Kamata 'kamata treba da dobije vrednost
Glavnica = rata_Bez_PDV - Kamata1 'rata_Bez_PDV treba da dobije vrednost
Preos_Glav = IIf(Preos_Glav1 - Glavnica > 0, Preos_Glav1 - Glavnica, 0)


' Ovaj StrSQL vrti rate od zadate do zadnje i ispravlja podatke vezane za reprogram
StrSQL = "update dbo_Plan_P set rata_bez_PDV =" _
& "'" & rata_Bez_PDV & "', Glavnica=" _
& "'" & Glavnica & "', Preos_Glavn=" _
& "'" & Preos_Glav & "', 3M_Vrednost=" _
& "'" & Novi3M & "', Marza=" _
& "'" & NovaMarza & "', kamata=" _
& "'" & Kamata1 & "', kamata1=" _
& "'" & NovaKamata & "'"
StrSQL = StrSQL + " where (((dbo_Plan_P.ID_Projekta)= " _
& "[forms]![Plan_Otplate]![ID_Projekta]) " _
& "And ((dbo_Plan_P.ID_Firme)= " _
& "[forms]![Plan_Otplate]![ID_Firme]) " _
& "And ((dbo_Plan_P.Mesec)='" & Broj & "'));"
DoCmd.RunSQL (StrSQL)
Next I


 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Data Type mismatch18.06.2008. u 08:54 - pre 193 meseci
Jako često je teže naći grešku nego rešenje. Mislim da je dobar put pošto se radi o update izjavi da probaš postepeno da povećavaš broj polja koji ćeš menjati u svom kodu postavljanjem komentara na kraju nekog reda, tako ćeš moći da tačno odrediš na kom polju se to dešava.
Ozbiljan i odgovoran mladić
 
Odgovor na temu

rstevic
Rade Stevic
Senior IT Consultant, DBA
Database Forum
Stavanger, Norway

Član broj: 69135
Poruke: 150
*.vektor.net.



Profil

icon Re: Data Type mismatch18.06.2008. u 09:12 - pre 193 meseci
Freska je pocela da se javlja kada sam dodao zadnji And u where statemen i to ovaj

& "And ((dbo_Plan_P.Mesec)='" & Broj & "'));"

mislim da nisam dobro napisao ovaj deo )='" & Broj & "'));".

u gornjem kodu moze se videti da je Broj dimenzionisan kao Integer, polje Mesec u tabeli dbo_Plan_P je takodje Integer.
Jedino ostaje da nisam dobro napiso ono sto sam gore naveo.
Pre nego sto sam dodao taj uslov Update je radio ali je radio na svim redovima u tabeli koji se odnose na taj projekat i tu firmu a ne samo od zadate rate pa nadalje.
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Data Type mismatch18.06.2008. u 09:22 - pre 193 meseci
Moguće je da ne mogu da se upoređuju numerički tipovi vrednosti ili polja (kao što je tvoje polje Broj) te stoga upotrebite funkciju CStr(). Pretvaranjem u stringove poređenje je i efikasnije. Znači Cstr() na levoj i na desnoj strani uslova.

 
Odgovor na temu

rstevic
Rade Stevic
Senior IT Consultant, DBA
Database Forum
Stavanger, Norway

Član broj: 69135
Poruke: 150
*.vektor.net.



Profil

icon Re: Data Type mismatch18.06.2008. u 09:30 - pre 193 meseci
HVAAAAALAAAAA @GETSBI!!!
Evo sta sam jedino promenio:
Bilo je

& "And ((dbo_Plan_P.Mesec)='" & Broj & "'));"

A sada je:

& "And (CStr((dbo_Plan_P.Mesec))='" & CStr(Broj) & "'));"

I RADIII

Jos jednom se zahvaljujem @Getsbi, ovo mi ne bi palo na pamet ni za 100 godina.
 
Odgovor na temu

Trtko
Koprivnica

Član broj: 69494
Poruke: 695
*.bilokalnik.hr.



+8 Profil

icon Re: Data Type mismatch18.06.2008. u 13:07 - pre 193 meseci
Koliko ja vidim da si pogriješio u apostrofima
& "And ((dbo_Plan_P.Mesec)='" & Broj & "'));"
a trebalo bi
& "And ((dbo_Plan_P.Mesec)=" & Broj & "));"

u sqlu bi bilo

And dbo_Plan_P.Mesec='5'

broj si usporedjivao s stringom
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Data Type mismatch18.06.2008. u 14:00 - pre 193 meseci
Trtko je u pravu. Sintaksa nie bila dobra. Kada su celi brojevi u pitanju, što je ovde verovatno slučaj poređenje će da radi. Ja sam imao loša iskustva sa poređenjem nekih izračunatih vrednosti i tada sam rešenje pronašao u funkciji za pretvaranje u string.
 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Data Type mismatch18.06.2008. u 19:37 - pre 193 meseci
Ja mislim da svi vi grešite! Samo ja sam u pravu, a pričali su da sam lud, hahahahaha.... Ozbiljno, Trtko je na dobrom putu ali njegova varijanta ne bi rešila već rešen problem, pošto to rešenje zavisi od regional settings.

Recimo da je Regional Settings podešen na Serbian (Croatian da se Trle oseti zapostavljenim) i recimo da je Broj koji se izračuna = 4,5

Tada Izjava "Update Tabela Set Polje = " & Broj izgleda "Update Tabela Set Polje = 4,5", a zarez kao što znate služi da se razdvoje polja u SQL izjavi... Desilo se to meni par puta, ja koristim malu funkcijicu
Code:
Public Function NTS(WhNum as Single) As String ' Numeric To String
NTS = Replace(CStr(WhNum), ",", ".") ' CStr takođe vraća vrednost sa zarezom umesto tačke, proverio sam
End Function


I pomoću izjave "Update Tabela Set Polje = " & NTS(Broj) izvršite promenu traženog polja.
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Data Type mismatch18.06.2008. u 20:08 - pre 193 meseci
Koliko se ja razumem, brojevi meseca idu od 1 do 12 u toku godine ili od 1 do n uopšteno govoreći. Tako da su ovde u pitanju celi brojevi i Trtkova primedba u vezi sintakse je bila sasvim zadovoljavajuće rešenje. Inače funkcija NTS() je O.K. u situaciji kad treba menjati tačku i zarez.
 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Data Type mismatch18.06.2008. u 20:19 - pre 193 meseci
Sorry, poneo me je tvoj poslednji post, lepo sam raspoložen pa sam hteo da budem i malo teatralan
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Trtko
Koprivnica

Član broj: 69494
Poruke: 695
*.bilokalnik.hr.



+8 Profil

icon Re: Data Type mismatch19.06.2008. u 07:19 - pre 193 meseci
Hehehe domaci, malo si bio prebrz
Nije bitno kaj je podešeno u regional setingu , Serbian , Croatina; japaneze , kineze .itd
več kaj si mu rekao što da koristi za decimalnu točku , dal , ili .

Zato ja lijepo iz accessa pogledam sto je podeseno u regional setingsu, obavjetim korisnika dali želi
da automatski ja promjenim regional setings a ako ne želi onda koristim onkvu funkciju kao što je tvoja
 
Odgovor na temu

[es] :: Access :: Data Type mismatch

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

Postavi temu Odgovori

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