AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"" kein gültiger Gleitkommawert

Ein Thema von Michael80 · begonnen am 21. Jun 2004 · letzter Beitrag vom 21. Jun 2004
Antwort Antwort
Seite 1 von 2  1 2      
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#1

"" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 10:14
Hallo, folgender Code produziert mir den Fehler "" kein Gültiger Gleitkommawert, sobald
der feldwert den er einlesen soll 0 ist. Auserdem übernimmt er nur die 1. stelle nach dem komma.
sprich er macht aus 199,24 --> 199,2. das Feld ist in meiner DB mit numeric(12,2) deklariert.

An was kann das liegen?!?


Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
var
  masterSL : TStringList;
  detailSL : TStringList;
  ndx : Integer; // Laufvariable für Master
  begin
  masterSL := TStringList.Create; // Master StringList
  detailSL := TStringList.Create; // Detail StringList
  try
    detailSL.Delimiter := ';'; // Trennzeichen der Einträge pro Zeile
    detailSL.QuoteChar := '|'; // Quoting Zeichen.
    masterSL.LoadFromFile(''+edit1.text+'');
    progressbar1.max := mastersl.count;
    for ndx := 0 to Pred (mastersl.Count) do
    begin
      progressbar1.Position := ndx;
      detailsl.Clear;
      detailsl.DelimitedText := '|' + StringReplace(mastersl.Strings[ndx],';','|;|',[rfReplaceAll]);
      //detailsl.savetofile('c:\test.txt');
      while detailsl.Count < 3 do detailsl.Add('');
      with DataModule2.IBQuery1 do
      begin
        Close;
        SQL.Text := 'INSERT INTO '+edit2.text+'(Artikelnummer, Bezeichnung, Verkaufspreis) VALUES (:wert1,:wert2,:wert3)';
        ParamCheck := True;
        ParamByName('wert1').AsString := detailsl.Strings[0];
        ParamByName('wert2').AsString := detailsl.Strings[1];
        ParamByName('wert3').AsBCD := strtocurr(detailsl.Strings[2]); <-------- das müsste die zeile sein
        ExecSQL;
        end; datamodule2.IBTransaction1.Commit;
        //DataModule2.IBTransaction1.Commit;
            //If RecsInTransact > 500 then
            //begin
            //IBTransaction1.Commit;
            //RecsInTransact := 0;
            //end;
            //inc(RecsInTransact);

        end;

  finally
    FreeAndNil (mastersl);
    FreeAndNil (detailsl);
    progressbar1.Position := 0;
    if MessageDLg('Einlesen abgeschlossen!',
              mtConfirmation,[mbOK],0)=mrOK then

  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 10:20
Hallo Michael,

ich würde es mal mit         ParamByName('wert3').AsString := detailsl.Strings[2]; <-------- das müsste die zeile sein versuchen.
  Mit Zitat antworten Zitat
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 10:22
Zitat von r_kerber:
Hallo Michael,

ich würde es mal mit         ParamByName('wert3').AsString := detailsl.Strings[2]; <-------- das müsste die zeile sein versuchen.
da trägt er die werte gar nicht ein sobald ein, drin vorkommt
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 10:22
Hai Michael80,

warum lässt Du die "Umwandlung" nicht durch den Treiber machen?

Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
.
.
        ParamByName('wert1').AsString := detailsl.Strings[0];
        ParamByName('wert2').AsString := detailsl.Strings[1];
        ParamByName('wert3').AsString := detailsl.Strings[2]; <-------- das müsste die zeile sein
        ExecSQL;
.
.
end;
So sollte es genau so gut gehen!
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 10:23
Zitat von Michael80:
...da trägt er die werte gar nicht ein sobald ein, drin vorkommt
Dann wandele vorher die , mit StringReplace in . um
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 10:37
Hab ich dir nicht schon mal geraten folgende Zeilen ausserhalb der Schleife zu schreiben ??
Delphi-Quellcode:
   SQL.Text := 'INSERT INTO '+edit2.text+'(Artikelnummer, Bezeichnung, Verkaufspreis) VALUES (:wert1,:wert2,:wert3)';
   ParamCheck := True;
Und DataModule2.IBQuery1.Close muss ganz weg!!!
Entweder man arbeitet mit einer Ergebnismenge (und die liefert nur SELECT) und benützt dann IBQuery.Open und IBQuery.Close
oder

bei SQL-Anweisungen ohne Ergebnismenge (INSERT, UPDATE, DELETE, ..) arbeitet man nur mit IBQuery.ExecSQL.
Man soll diese 2 Arbeitsweisen nicht mischen.
Andreas
  Mit Zitat antworten Zitat
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 10:42
Zitat von shmia:
Hab ich dir nicht schon mal geraten folgende Zeilen ausserhalb der Schleife zu schreiben ??
Delphi-Quellcode:
   SQL.Text := 'INSERT INTO '+edit2.text+'(Artikelnummer, Bezeichnung, Verkaufspreis) VALUES (:wert1,:wert2,:wert3)';
   ParamCheck := True;
Und DataModule2.IBQuery1.Close muss ganz weg!!!
Entweder man arbeitet mit einer Ergebnismenge (und die liefert nur SELECT) und benützt dann IBQuery.Open und IBQuery.Close
oder

bei SQL-Anweisungen ohne Ergebnismenge (INSERT, UPDATE, DELETE, ..) arbeitet man nur mit IBQuery.ExecSQL.
Man soll diese 2 Arbeitsweisen nicht mischen.
okok hab ich vergessen
  Mit Zitat antworten Zitat
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 17:48
Zitat von shmia:
Hab ich dir nicht schon mal geraten folgende Zeilen ausserhalb der Schleife zu schreiben ??
Delphi-Quellcode:
   SQL.Text := 'INSERT INTO '+edit2.text+'(Artikelnummer, Bezeichnung, Verkaufspreis) VALUES (:wert1,:wert2,:wert3)';
   ParamCheck := True;
wenn ich jetz richtig bin übergibt er dann mit exec sql die einzelnen werte, richtig??
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 18:22
Zitat:
warum lässt Du die "Umwandlung" nicht durch den Treiber machen?
In den seltensten Fällen wandelt der Treiber Parameter vom Typ Unknown um (DOA macht es zum Bleistift nicht (ist ja auch kein Treiber ) -> die DB muss das dann erledigen. Mit etwas Pech für JEDEN Aufruf.

Zitat:
...da trägt er die werte gar nicht ein sobald ein, drin vorkommt
Das gute, alte Problem mit unterschiedlichen Regional settings von Client und Server.
Ein blindes Umwandeln von ',' zu '.' kann ich nicht empfehlen. Vielmehr sollte man die Werte lokal in den Zieltyp umwandeln.
Schließlich hat der User sein System so eingestellt, wie er es für "richtig" empfindet. Ob der Server jetzt auf deutsch, englisch oder japanisch läuft interessiert dann nicht mehr.

Das war also gar nicht so falsch
ParamByName('wert3').AsBCD := strtocurr(detailsl.Strings[2]);
  Mit Zitat antworten Zitat
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: "" kein gültiger Gleitkommawert

  Alt 21. Jun 2004, 18:47
So, dieser code würde funktionieren, wenn er nicht immernoch eine Kommastelle abschneiden würde. Seltsam ist (dank an r_kerber) wenn ich
statt :wert3 gleich 1.28 eintrag, schreibt er mir auch 1,28 in die DB.
lass ichs über :wert3 laufen macht er wieder 1,2

Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
var
  masterSL : TStringList;
  detailSL : TStringList;
  ndx : Integer; // Laufvariable für Master
  begin
  masterSL := TStringList.Create; // Master StringList
  detailSL := TStringList.Create; // Detail StringList
  try
    detailSL.Delimiter := ';'; // Trennzeichen der Einträge pro Zeile
    detailSL.QuoteChar := '|'; // Quoting Zeichen.
    masterSL.LoadFromFile(''+edit1.text+'');
    progressbar1.max := mastersl.count;
    for ndx := 0 to Pred (mastersl.Count) do
    begin
      progressbar1.Position := ndx;
      detailsl.Clear;
      detailsl.DelimitedText := '|' + StringReplace(mastersl.Strings[ndx],';','|;|',[rfReplaceAll]);
      //detailsl.savetofile('c:\test.txt');
        DataModule2.IBQuery1.SQL.Text := 'INSERT INTO '+edit2.text+'(Artikelnummer, Bezeichnung, Verkaufspreis) VALUES (:wert1,:wert2,:wert3)';
        DataModule2.IBQuery1.ParamCheck := True;
        while detailsl.Count < 3 do detailsl.Add('');
      with DataModule2.IBQuery1 do
      begin
        ParamByName('wert1').AsString := detailsl.Strings[0];
        ParamByName('wert2').AsString := detailsl.Strings[1];
        ParamByName('wert3').AsString := detailsl.Strings[2];
        ExecSQL;
        end; datamodule2.IBTransaction1.Commit;
        end;

  finally
    FreeAndNil (mastersl);
    FreeAndNil (detailsl);
    progressbar1.Position := 0;
    if MessageDLg('Einlesen abgeschlossen!',
              mtConfirmation,[mbOK],0)=mrOK then

  end;
end;
Zitat von Robert_G:
Das war also gar nicht so falsch
Source:
ParamByName('wert3').AsBCD := strtocurr(detailsl.Strings[2]);
(sourcetabelle ist wieder mit Kommas)

macht er wieder 1,2

wenn ich schreib

ParamByName('wert3').AsBCD := strtocurr('1,28'); trägt er es wieder richtig ein

wobei er dann wieder meckert mit "" ist kein gleitkommwert, sobald als Wert die 0 vorkommt.


also tendier ich zum oberen code!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz