AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Import aus Access >> ThousandSeparator
Thema durchsuchen
Ansicht
Themen-Optionen

Import aus Access >> ThousandSeparator

Ein Thema von manfred_h · begonnen am 16. Nov 2006 · letzter Beitrag vom 20. Nov 2006
Antwort Antwort
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#1

Import aus Access >> ThousandSeparator

  Alt 16. Nov 2006, 15:47
Datenbank: Firebird • Version: 1.5 • Zugriff über: Fibplus
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:
    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;
Shalom
Manfred
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Import aus Access >> ThousandSeparator

  Alt 20. Nov 2006, 15:01
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:
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;
You can use it like this:
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Import aus Access >> ThousandSeparator

  Alt 20. Nov 2006, 15:04
Warum übergibst du die Werte als String?
Markus Kinzler
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Import aus Access >> ThousandSeparator

  Alt 20. Nov 2006, 15:19
Zitat von mkinzler:
Warum übergibst du die Werte als String?
Hallo mkinzler

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Import aus Access >> ThousandSeparator

  Alt 20. Nov 2006, 15:27
Wenn du ihn als Float (.AsFloat) übergibst dürfte der Fehler nicht auftreten.
Markus Kinzler
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#6

Re: Import aus Access >> ThousandSeparator

  Alt 20. Nov 2006, 15:44
Zitat von mkinzler:
Wenn du ihn als Float (.AsFloat) übergibst dürfte der Fehler nicht auftreten.
Jetzt erhalte ich die Meldung:

7.111,15 is not a valid floating point value
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: Import aus Access >> ThousandSeparator

  Alt 20. Nov 2006, 17:38
Es läuft

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:
    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;
Besten Dank mkinzler für deine Hilfe.

Shalom
Manfred
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:52 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