webForumDet fria alternativet

Hantering av decimalavgränsare

.NETur .NET

2 svar · 398 visningar · startad av clarkbones

clarkbonesMedlem sedan feb. 20013 023 inlägg
#1

Hej!

Jag har ett problem som jag tror det måste finnas en "vacker" lösning på istället för de fula som jag kommer på.

Användaren matar in data i en gridkomponent (flexgrid från componentone, men det spelar mindre roll). Svenska inställningar användes, vilket innebär att kommatecken är decimalavgränsare.

Nu skall värdena från gridkomponenten sparas. Detta gör med
GetDatametoden
på instansen av griden som i mitt fall heter:
grdMissiv.

Användaren kan antingen skrivit in ett decimaltal eller tagit bort ett värde (det blir då tom sträng). Eftersom jag inte vet detta i förväg kan jag inte tilldela värdet direkt till en variabel. Mitt huvudproblem är att i SQL så måste man ha punkt som decimalavgränsare.

Låt oss anta att användaren matar in 214,5

Dim sAmount as string
Dim sngAmount as Single 

If grdMissiv.GetData(grdMissiv.Row, 8) Is Nothing Then
            sAmount = "NULL"
Else
            If grdMissiv.GetData(grdMissiv.Row, 8) = "" Then
                sAmount = "NULL"
            Else
                sngAmount = grdMissiv.GetData(grdMissiv.Row, 8) ' Blir nu 214.5 vilket är korrekt
                sAmount=sngAmount   ' Men när jag konverterar detta till en sträng blir strängen 
'återigen 214,5 vilket skapar fel i SQL-frågan
            End If

End if

ssql="UPDATE TMissiv SET PaidAmount=" & sAmount
...

Om jag var säker på att det alltid fanns ett värde i datagriden skulle jag förstås kunna läsa in värdet direkt utan att kontrollera om det var en tom sträng. I förlängningen skulle jag då använda

ssql="UPDATE TMissiv SET PaidAmount=" & sngAmount

istället.

Hoppas det finns någon som förstår mitt problem.
- En ful lösning går ut på att replaca kommatecken med punkt i strängen
- En annan ful lösning går ut på att switcha mellan olika cultures (svensk/engelsk)

...men jag tycker att MS borde insett den här problematiken och det därför borde finnas bättre sätt än att gå loss på strängar...

GladhMedlem sedan maj 20012 812 inlägg
#2

borde insett den här problematiken och det därför borde finnas bättre sätt än att gå loss på strängar

Parameters?

Om du använder dig av Parameters i dina SQL strängar så kommer dessa att hantera dina tal på korrekt sätt, även om de innehåller komma tecken. Om du envisas med din SQL sats (vilket skulle vara en lycka för en hackare) så får du helt enkelt byta ut komma mot en punkt.

- M

clarkbonesMedlem sedan feb. 20013 023 inlägg
#3

Mjo, det kan ju vara en bra lösning. Tack. Beträffande säkerhet så är risken minimal i just detta fall, även om du har helt rätt principiellt.

130 ms totalt · 3 externa anrop · v20260731065814-full.94fcd635
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)