Jag har ett konstigt problem som uppträder på 2 Win98 maskiner jag har testat mitt program på men inte på min W2K maskin. Om det har med operativsystemet att göra vet jag inte... Sparar du data via Recordset, Command Objectet eller SQL Sträng. Recordset och Command är okänsligt för Decimal separator. Via recordsetet, såhär: Testa att skriv(antar att fltPris är en textruta?): Men va #¤%¤#%#%#¤! Glad att man är till nån hjälp. Kan faktist göra skilnad vad man skickar till en variant. Lagrar faktist tilldelad datatyp.Decimaltecken VB-ADO-Access
När jag läser ett värde från databasen (double) till en textbox visas värdet korrekt med , som decimaltecken. Men när jag skriver värdet (med , som decimaltecken) till databasen försvinner decimaltecknet, 5,8 blir 58 osv. Använder jag däremot . som decimaltecken när jag skriver värdet fungerar det utmärkt.
Jag har kollat alla nationella inställningar och det verkar vara korrekt, det blir ju rätt när jag läser ur databasen...
Någon som har någon idé? Jag börjar bli desperat...
/JohanSv: Decimaltecken VB-ADO-Access
Däremot i SQL Sträng bör du använda en punk.
T.ex
Public Function SQLNumber(Value as Variant) AS String
If IsNull(Value) Then
SQLNumber = "Null"
Else
SQLNumber = Replace(CStr(Value), Format$(0,"."), ".")
End If
End Function
Dim strSQL as string
strSQL = "UPDATE TableName SET FieldName = " & SQLNumber(NewValue) & " WHERE TableName.ID = " & RecIDSv: Decimaltecken VB-ADO-Access
With rstTmp
.Open "SELECT * FROM tblProd WHERE ID = " & lngID, con, adOpenDynamic, adLockOptimistic
If .EOF Then
.AddNew
End If
.Fields("lngUserID") = ActiveUser
.Fields("lngProdID") = arrProd(cboProd.ListIndex)
.Fields("strAnt") = fltAnt
.Fields("dblAntal") = fltAntal
.Fields("dblPris") = fltPris
.Fields("dteDatum") = FormatDateTime(dteDatum, vbShortDate)
.Fields("lngKundID") = kundID
.Update
End WithSv: Decimaltecken VB-ADO-Access
Fields("dblPris") = Cdbl(fltPris)
Du bör oxå placerat kod i Validerings eventet för kontroller i vilket man matar in numeriska värden. Exempel:
Private Sub Text1_Validate(Cancel As Boolean)
If IsNumeric(Text1) Then
'Ok
Else
MsgBox "Var vänlig ange ett numeriskt värde för Text1!"
Cancel = True
End If
End Sub
Om du ska tillåta null värde bör du skriva:
Private Sub Text1_Validate(Cancel As Boolean)
If Len(Text1) Then
If IsNumeric(Text1) Then
'Ok
Else
MsgBox "Var vänlig ange ett numeriskt värde för Text1!"
Cancel = True
End If
End If
End Sub
If Len(Text1) Then
Fields("FieldName") = Cdbl(Text1)
Else
Fields("FieldName") = Null
End ifSv: Decimaltecken VB-ADO-Access
Det fungerade med CDbl, men jag är helt säker på att jag har testat det innan... Jaja, nu fungerar det i alla fall, TACK!
Jag har givetvis en kontroll av uppgifterna, men tycket inta att det var relevant att ta med den koden här...
/JohanSv: Decimaltecken VB-ADO-Access