Entwickler-Ecke
Datenbanken - Problem mit Dezimalfeldern vom Delphi nach Firebird
Anateus - Mo 27.09.10 11:58
Titel: Problem mit Dezimalfeldern vom Delphi nach Firebird
Hallo,
ich programmiere mit Delphi 7 und nutze dbExpress, um auf die Firebird 2.0 zuzugreifen. Ich habe folgende Tabelle definiert:
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8:
| CREATE TABLE WAEHRUNG ( WANR CHAR(3) NOT NULL, WFAKTOR DECIMAL(12,7) NOT NULL, WABEZ VARCHAR(40),
PRIMARY KEY(WANR) ); |
Ich erfasse jetzt in einem Delphi-Formular in einer TextBox den Wert "1,99583".
Gespeichert wird aber "199583".
Erst wenn ich in die TextBox den Wert "1.95583" eingebe, dann
wird auch der Wert "1,99583" in die Firebird-Datenbank geschrieben.
Wie kann ich also den SQLConnector so einstellen, dass er als Dezimal-Trenner das Komma und nicht den Punkt nimmt?
Gruß
Anateus
Moderiert von
Martok: SQL-Tags gesetzt
Nersgatt - Mo 27.09.10 12:02
Hallo und willkommen!
Zeig mal etwas Code, wie Du den Wert an die Datenbank übergibst.
Anateus - Mo 27.09.10 12:10
Hallo Jens,
hier die Einstellung vom SQLConnector:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| DriverName=Interbase Database=d:\datenbanken\firebird\wws.fdb RoleName=RoleName User_Name=seg Password=seg ServerCharSet= SQLDialect=3 ErrorResourceFile= LocaleCode=0000 BlobSize=-1 CommitRetain=False WaitOnLocks=True Interbase TransIsolation=ReadCommited Trim Char=False |
hier etwas Source:
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: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65:
| procedure TWaehr.SpeichernClick(Sender: TObject); var TD : TTransactionDesc; begin If Nummer.Text = '' then begin MessageDlg('Bitte eine Währung angeben! ', mtError, [mbOk], 0); exit; end;
TD.TransactionID := getNextTransactionID; TD.IsolationLevel := xilREADCOMMITTED; DM4_SEG.SQLConnection1.StartTransaction(TD); try if WaehrungVorhanden then begin DB_Versorgen; DM4_SEG.UWaehrung.ExecSQL; end else begin DB_Versorgen; DM4_SEG.IWaehrung.ExecSQL; end; DM4_SEG.SQLConnection1.Commit(TD);
except DM4_SEG.SQLConnection1.Rollback(TD); end;
Nummer.SetFocus; Leeren; end;
function TWaehr.DB_Versorgen : Boolean; begin if WaehrungVorhanden then begin with DM4_SEG.UWaehrung do begin Params[00].asString := DateToStr8(BDatum); Params[01].asString := Faktor.text; Params[02].asString := Bez.text; Params[03].asString := Nummer.Text; end; end else begin with DM4_SEG.IWaehrung do begin Params[00].asString := Nummer.Text; Params[01].asString := DateToStr8(BDatum); Params[02].asString := Faktor.text; Params[03].asString := Bez.text; end; end end; |
Gruß
Anateus
Moderiert von
Martok: Delphi-Tags gesetzt
Nersgatt - Mo 27.09.10 12:29
Du darfst die Parameter nicht als String übergeben (asString), weil dann die DB davon ausgeht, dass das amerikanische Format verwendet wird. Da ist das , das Tausendertrennzeichen und der . das Dezimaltrennzeichen.
Übergib die Werte als Float (asFloat) und mach die Umwandlung selbst:
Delphi-Quelltext
1:
| Params[02].asFloat := StrToFloat(Faktor.text); |
Anateus - Mo 27.09.10 13:03
Hallo Jens,
super, es hat funktioniert!
Ich bedanke mich für Deine Hilfe.
Gruß
Anateus
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!