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

Data Type mismatch

[es] :: Access :: Data Type mismatch

[ Pregleda: 511 | Odgovora: 10 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rstevic
Rade Stevic
Zemun

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

Sajt: www.hypo-leasing.co.yu


Profil

icon Data Type mismatch18.06.2008. u 08:19
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


18.06.2008. u 08:19 

domaci_a_nas
Nikola Radovanović
Kragujevac

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



Profil

icon Re: Data Type mismatch18.06.2008. u 08:54
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ć
18.06.2008. u 08:54 

rstevic
Rade Stevic
Zemun

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

Sajt: www.hypo-leasing.co.yu


Profil

icon Re: Data Type mismatch18.06.2008. u 09:12
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.
18.06.2008. u 09:12 

Getsbi
Miroljub Zahorjanski
Vršac

Moderator
Član broj: 124608
Poruke: 1332
91.150.112.*



Profil

icon Re: Data Type mismatch18.06.2008. u 09:22
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.

I'll know what I want, when I see it.
18.06.2008. u 09:22 

rstevic
Rade Stevic
Zemun

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

Sajt: www.hypo-leasing.co.yu


Profil

icon Re: Data Type mismatch18.06.2008. u 09:30
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.
18.06.2008. u 09:30 

Trtko
Koprivnica

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



Profil

icon Re: Data Type mismatch18.06.2008. u 13:07
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
18.06.2008. u 13:07 

Getsbi
Miroljub Zahorjanski
Vršac

Moderator
Član broj: 124608
Poruke: 1332
91.150.112.*



Profil

icon Re: Data Type mismatch18.06.2008. u 14:00
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.
I'll know what I want, when I see it.
18.06.2008. u 14:00 

domaci_a_nas
Nikola Radovanović
Kragujevac

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



Profil

icon Re: Data Type mismatch18.06.2008. u 19:37
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ć
18.06.2008. u 19:37 

Getsbi
Miroljub Zahorjanski
Vršac

Moderator
Član broj: 124608
Poruke: 1332
91.150.112.*



Profil

icon Re: Data Type mismatch18.06.2008. u 20:08
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.
I'll know what I want, when I see it.
18.06.2008. u 20:08 

domaci_a_nas
Nikola Radovanović
Kragujevac

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



Profil

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

Trtko
Koprivnica

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



Profil

icon Re: Data Type mismatch19.06.2008. u 07:19
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
19.06.2008. u 07:19 

[es] :: Access :: Data Type mismatch

[ Pregleda: 511 | Odgovora: 10 ]

Postavi temu Odgovori

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