Autor Beitrag
TrendyÄndy
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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 ?

ausblenden volle Höhe Delphi-Quelltext
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);  //hier wird die exception ausgelöst beim 2 durchlauf
          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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: 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



BeitragVerfasst: Mi 18.08.04 01:07 
Nimm mal den Punkt als dezimal Separator.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 18.08.04 10:09 
Hansa ICH DANKE DIR :-) DecimalSeparator := ','; funktioniert. Läufts alles bestens
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: 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:

ausblenden 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