[Delphi] Webservice verandert decimaalteken?

Pagina: 1
Acties:

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Op werk hebben we een client/server app gemaakt met de Delphi 7 webservices. Op de server draait een Apache 2 webmodule die een MySQL db aanspreekt. Vervolgens halen we data over via SOAP. Dat stuk werkt, maar we hebben een probleem.

Als de data via SOAP wordt overgehaald veranderen alle decimaaltekens in een punt. Wordt er direct gekoppeld aan MySQL (via de dbExpress componenten) dan is het scheidingsteken wel een komma (dat zijn mijn landinstellingen). Door in de code DecimalSeparator := ',' op te nemen werkt niet. De koppeling van database grid naar database verloopt zo:

code:
1
2
TDBGrid -> TDataSource -> TClientDataSet -> TSoapConnection -> 
  TDatasetProvider -> TSQLTable -> TSQLConnection


Ik zou graag willen zien dat als er via SOAP wordt gewerkt er ook een komma kwam te staan ipv een punt. Heeft iemand een idee, tip of hack?

www.fendt.com | Nikon D7100 | PS5


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

De data als string versturen, ipv als floating point waarde... Dat is wel een hele vieze methode, maar het kan wel. Dan kun je met StrToFloat de waarde weer in een floating point gieten.

Ik zou dit overigens niet doen, maar gewoon een floating point waarde met punt accepteren, omdat het in SOAP gewoon zo moet. Het moet voor iedereen in de wereld hetzelfde zijn en er is dus gewoon voor een punt gekozen.

Zelfde probleem heb je denk ik met datum/tijdformaat. Dat is in SOAP ook anders dan in je locale instellingen.

日本!🎌


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Dat is dus een beetje het probleem. Data wordt in XML altijd verzonden als string, hiervoor zijn een aantal conversie procedures te vinden in de Delphi source bestanden. Zelf alles van string naar float en float naar string schrijven gaat ook niet omdat de data overdracht automatisch gebeurt via de SoapConnection en DataSetProvider (en nog een paar andere componenten natuurlijk).

www.fendt.com | Nikon D7100 | PS5


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

DecimalSeparator := '.' in je server en client gebruiken zou wel moeten werken. Tis een bug van Borland die helaas landspecifeke FloatToStr code gebruikt :|

Als je het niet voor je hele applicatie zo wilt laten kan je de code aanpassen in de unit OPToSOAPDomConv.pas. In TSOAPDomConv.SetObjectPropFromText en TSOAPDomConv.GetObjectPropAsText wissel je de DecimalSeperator om en weer terug.

We adore chaos because we like to restore order - M.C. Escher


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Dat werkt ook niet :(. Heb eens gekeken naar de XML die vestuurt wordt, maar de dataset wordt als Binairy opgestuurd. Ik kan in de SOAP units dus weinig invloed uitoefenen op de DecimalSeparator. Heb in de andere units nog zitten spitten naar de conversie van binairy data naar dataset, helaas ook hier weinig te ontdekken.

Heeft iemand nog een tip?

www.fendt.com | Nikon D7100 | PS5


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 16:04

alienfruit

the alien you never expected

Was dat niet gefixt in Delphi 7.1?

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Nee, collega van me heeft de update geinstalleerd maar dat leverde in eerste instantie meer problemen op dan werden opgelost.

www.fendt.com | Nikon D7100 | PS5

Pagina: 1