[VB6/ADO] Parameterized queries en locale settings probleem

Pagina: 1
Acties:

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Ik gebruik parameterized queries in combinatie met ADO 2.8 en Access 2000. Ik werd zojuist onaangenaamd verrast door de volgende test:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Dim conn As ADODB.Connection
Dim cmd As New ADODB.Command
Dim param As Parameter
Dim SQL As String

SQL = "UPDATE MyTable SET DoubleField=@1"
Set param = cmd.CreateParameter("@1", adDouble, adParamInput)
param.Value = "0.5"
cmd.Parameters.Append param
cmd.CommandText = SQL
cmd.Execute

Wanneer mijn locale settings op UK staat (dus punt is decimal seperator) gaat dit goed. Het veld wordt netjes geupdate met de waarde 0,5. Wanneer mijn locale settings op NL staat (dus komma is decimal seperator) gaat dit niet goed. De waarde 5 wordt in het veld gezet.

In SQL queries moet je altijd US notation gebruiken als input, dus ik zou het logisch vinden dat parameterized queries ook op deze manier werken. Wanneer ik debug blijkt dat nadat ik param.Value = "0.5" heb uitgevoerd dat het veld daarna wordt gewijzigd in de waarde 5 (bij NL regional settings). Ik ben hier niet blij mee, iemand enig idee of ik dit gedrag kan aanpassen zodat ik altijd gewoon US notation kan gebruiken?

It’s nice to be important but it’s more important to be nice


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Een makkelijker oplossing is om in code de waarde 0,5 aan de parameter te geven, en niet de string "0.5". Als het goed is zorgt de parameter er dan namelijk zelf voor dat de waarde als een double doorgegeven wordt en zal derhalve ook zelf rekening houden met het formaat waarin een double verwacht wordt.

My personal website


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
OZ-Gump schreef op maandag 14 februari 2005 @ 11:14:
Een makkelijker oplossing is om in code de waarde 0,5 aan de parameter te geven, en niet de string "0.5". Als het goed is zorgt de parameter er dan namelijk zelf voor dat de waarde als een double doorgegeven wordt en zal derhalve ook zelf rekening houden met het formaat waarin een double verwacht wordt.
Dit is inderdaad het probleem. Het code voorbeeld is even een snelle test, maar normaal gesproken gebruik ik een functie AddParameter die de waarde als string verwacht.
Nu heb ik de class zo ontworpen dat hij floats altijd converteert naar US notation. Indien ik de VB functie Val gebruik (die ook altijd US input verwacht), dus param.Value = Val("0.5") gebruik is het probleem opgelost. Ik snap 'm nu, bedankt voor het meedenken. :)

It’s nice to be important but it’s more important to be nice