![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: Fibplus
Import aus Access >> ThousandSeparator
Hallo zusammen
ich versuche Daten aus einer Access DB nach Firebird zu Importieren. Das ganze geht auch bis ich eine Zahl habe die über 999 ist. Da Access das ganze so 7.111,15 gespeichert hat. Erhalte ich immer die Fehlermeldung: 7.111,15 is not a valid BCD value Hat auch Anfangs probleme mit dem Dezimalseparator aber dank der Forumssuche bin ich da weitergekommen. Der code sieht folgendermassen aus:
Delphi-Quellcode:
Shalom
DM.DB_Gideons.Connected := True;
DM.Default_D.Open; DecimalSeparator := ','; ThousandSeparator := '.'; frm_main.log_window.Lines.Add('==================history================='); if not DM.Camps.Active then DM.Camps.Open; try DM.ADOT_Default_d_imp.Open; DM.ADOT_Default_d_imp.First; for i := 0 to DM.ADOT_Default_d_imp.RecordCount -1 do begin with DM.Default_D do begin Insert; FieldByName('ID').AsString := DM.ADOT_default_d_imp.FieldByName('ID').AsString; FieldByName('C_NR').AsString := DM.Camps.FieldByName('C_NR').AsString; FieldByName('U_NR').AsString := DM.Camps.FieldByName('U_NR').AsString; FieldByName('ID_AREA').AsString := DM.ADOT_default_d_imp.FieldByName('id_sparte').AsString; FieldByName('H_DATE').AsString := DM.ADOT_default_d_imp.FieldByName('datum').AsString; FieldByName('H_KIND_SERVICE').AsString := DM.ADOT_default_d_imp.FieldByName('Art_Dienst').AsString; FieldByName('H_DONATION').AsString := DM.ADOT_default_d_imp.FieldByName('Spende').AsString; FieldByName('H_G_SPEAKER').AsString := DM.ADOT_default_d_imp.FieldByName('Gideon_Sprecher').AsString; FieldByName('H_C_PERSON').AsString := DM.ADOT_default_d_imp.FieldByName('kontakt_herg_durch').AsString; FieldByName('H_NOTE').AsString := DM.ADOT_default_d_imp.FieldByName('Bemerkung').AsString; FieldByName('L_UPDATE').AsString := DM.ADOT_default_d_imp.FieldByName('letzte_Aktualisierung').AsString; frm_main.log_window.Lines.Add(''+ FieldByName('H_DATE').AsString) ; // Logeintrag Post; DM.ADOT_Default_D_imp.Next; end; end; finally DM.pFIBTrans.Commit; end; Manfred |
Re: Import aus Access >> ThousandSeparator
Hallo nochmals
bin leider noch nicht weitergekommen hier noch ein paar Info's: In Access ist das feld als Text definiert. In Firefox ist es als DECIMAL(18,2) definiert. habe schon Stunden mit Google gesucht und unteranderem Diesen Code gefunden:
Delphi-Quellcode:
You can use it like this:
function TextToNumber(const Input: string): Extended;
{Remove all thousands separators from Input string and convert to a floating point number} var Num: string; begin Result := 0; Num := Input; if Num = '' then Exit; while Pos(ThousandSeparator, Num) > 0 do Delete(Num, Pos(ThousandSeparator, Num), 1); try Result := StrToFloat(Num); except MessageDlg('Could not convert ' + Input + ' to a valid number.', mtError, [mbOK], 0); end; end; StrToFloat(TextToNumber('1,234.56')); To format a floating point number to a string with thousands separators, use FormatFloat or FloatToStrF. Example: FormatFloat('#,##0.00', 1234.56); aber irgendwie komme ich nicht weiter. Kann mir jemand einen Ratschlag geben. Shalom Manfred |
Re: Import aus Access >> ThousandSeparator
Warum übergibst du die Werte als String?
|
Re: Import aus Access >> ThousandSeparator
Zitat:
das habe ich als erstes versucht. Da erhalte ich immer die Fehlermeldung: Exception class EBcdException with message '7.111,15 is not a valid BCD value' Manfred |
Re: Import aus Access >> ThousandSeparator
Wenn du ihn als Float (.AsFloat) übergibst dürfte der Fehler nicht auftreten.
|
Re: Import aus Access >> ThousandSeparator
Zitat:
7.111,15 is not a valid floating point value |
Re: Import aus Access >> ThousandSeparator
Es läuft :lol:
wenn's interesiert:
Delphi-Quellcode:
function TextToNumber(const Input: string): Extended;
{Remove all thousands separators from Input string and convert to a floating point number} var Num: String; begin Result := 0; Num := Input; if Num = '' then Exit; while Pos(ThousandSeparator, Num) > 0 do Delete(Num, Pos(ThousandSeparator, Num), 1); try Result := StrToFloat(Num); except end; end;
Delphi-Quellcode:
Besten Dank mkinzler für deine Hilfe. :cheers:
DM.DB_Gideons.Connected := True;
DM.Default_D.Open; DecimalSeparator := ','; ThousandSeparator := '.'; frm_main.log_window.Lines.Add('==================history================='); if not DM.Camps.Active then DM.Camps.Open; try DM.ADOT_Default_d_imp.Open; DM.ADOT_Default_d_imp.First; for i := 0 to DM.ADOT_Default_d_imp.RecordCount -1 do begin with DM.Default_D do begin Insert; FieldByName('ID').AsString := DM.ADOT_default_d_imp.FieldByName('ID').AsString; FieldByName('C_NR').AsString := DM.Camps.FieldByName('C_NR').AsString; FieldByName('U_NR').AsString := DM.Camps.FieldByName('U_NR').AsString; FieldByName('ID_AREA').AsString := DM.ADOT_default_d_imp.FieldByName('id_sparte').AsString; FieldByName('H_DATE').AsString := DM.ADOT_default_d_imp.FieldByName('datum').AsString; FieldByName('H_KIND_SERVICE').AsString := DM.ADOT_default_d_imp.FieldByName('Art_Dienst').AsString; // H_DONATION := DM.ADOT_default_d_imp.FieldByName('Spende').AsVariant; Result := TextToNumber(H_DONATION); FieldByName('H_DONATION').AsVariant := Result; // FieldByName('H_G_SPEAKER').AsString := DM.ADOT_default_d_imp.FieldByName('Gideon_Sprecher').AsString; FieldByName('H_C_PERSON').AsString := DM.ADOT_default_d_imp.FieldByName('kontakt_herg_durch').AsString; FieldByName('H_NOTE').AsString := DM.ADOT_default_d_imp.FieldByName('Bemerkung').AsString; FieldByName('L_UPDATE').AsString := DM.ADOT_default_d_imp.FieldByName('letzte_Aktualisierung').AsString; frm_main.log_window.Lines.Add(''+ FieldByName('H_DATE').AsString) ; // Logeintrag Post; DM.ADOT_Default_D_imp.Next; end; end; finally DM.pFIBTrans.Commit; end; Shalom Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz