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!