Autor |
Beitrag |
TrendyÄndy
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 18.08.04 00:15
Hallo Leute
Kleines Problem. Ich habe eine for-Schleife gebastelt, die Daten aus meinem formular sammelt, in einen record packt und anschliessend an einen webservice übermittelt. Funktioniert auch super, bis ich in das preisfeld einen preis mit komma eingebe. Die dazugehörige variable ist als REAL definiert.
Das komische ist, beim ersten durchlauf der schleife läuft alles prima und der webservice speichert auch die daten korrekt ab. Beim zweiten durchlauf wird eine Exception vom Typ EConvertError erzeugt. Was soll das ?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| procedure TForm1.Button1Click(Sender: TObject); var awp: AuctionWeb_WSPortType; errc,errc2: integer; itid: widestring; errstr:widestring; header: item_header; inventory: item_inventory; itemdata: item; i,j: integer; begin for i:=0 to 20 do begin if length(StringGrid1.Cells[i+1,1]) <> 0 then begin header := item_header.Create; inventory := item_inventory.Create; itemdata := item.create; with header do begin artikel:=ComboBox1.Text+' '+Artikelfeld.text+' '+StringGrid1.Cells[0,0]+' '+StringGrid1.Cells[i+1,0]; preis:=StrToFloat(preisfeld.text); grafiklink:=grafiklinkfeld.text; user_def1:=user_def1feld.text; usepay:='N'; shop_item:='N'; end; with inventory do begin free_quantity:=StrToInt(StringGrid1.Cells[i+1,1]); lister_ignore:=false; shop_ignore:='N'; acc_ignore:=false; inventory_active:=true; end; with itemdata do begin item_header:=header; item_inventory:=inventory; end; awp:=GetAuctionWeb_WSPortType(True); awp.addItem(28,'94383784',100,1,5258144,'kdmchhdk',itemdata,errc,itid); Label1.Caption:=itid; awp.getErrorString(28,'94383784',10,1,5258144,'kdmchhdk',errc,'de',errc2,errstr); end; end; Label2.Caption:=errstr; Preisfeld.Text:=''; GrafiklinkFeld.Text:=''; Artikelfeld.Text:=''; User_def1feld.Text:=''; for j:=0 to 20 do StringGrid1.Cells[i+1,1]:=''; end; |
sieht jemand nen Fehler oder sitzt ein kleiner mann bei mir im rechner, der willkürlich entscheidet, was REAL ist und was nicht ? Gruß - André
|
|
Matthias-K
      
Beiträge: 271
Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
|
Verfasst: Mi 18.08.04 00:20
an welcher stelle tritt den der fehler auf?
das wäre hilfreich!
mfg matthias
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.08.04 01:07
Nimm mal den Punkt als dezimal Separator.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 18.08.04 03:31
Verwende am besten die vordefinierte Konstante "DecimalSeparator". Das wäre in D ein , und in US ein . Je nachdem, wie das Betriebssystem eingestellt ist.
Niemals so etwas im Klartext angeben 
_________________ Gruß
Hansa
|
|
TrendyÄndy 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 18.08.04 10:09
Hansa ICH DANKE DIR  DecimalSeparator := ','; funktioniert. Läufts alles bestens
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: Mi 18.08.04 11:49
Moin!
Und um die von Hansa angesprochene Sprachenkompatibilität zu gewährleisten kannst du auch folgendes machen:
Ich vermute mal du verwendest Edit Felder um die Zahlen vom Benutzer eingeben zu lassen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| Procedure Tfrm_Calculation_Params.EditFieldKeyPress(Sender: TObject; Var Key: Char); Begin If ( Key In ['.', ','] ) Then Key := DecimalSeparator; End; |
So ist es dann immer der richtige Separator bei der Eingabe.
MfG
Muetze1
|
|
|