Autor Beitrag
Anateus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 27.09.10 11:58 
Hallo,
ich programmiere mit Delphi 7 und nutze dbExpress, um auf die Firebird 2.0 zuzugreifen. Ich habe folgende Tabelle definiert:
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
CREATE TABLE WAEHRUNG
(
WANR CHAR(3NOT NULL,
WFAKTOR DECIMAL(12,7NOT 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 user profile iconMartok: SQL-Tags gesetzt
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 27.09.10 12:02 
Hallo und willkommen!

Zeig mal etwas Code, wie Du den Wert an die Datenbank übergibst.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Anateus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 27.09.10 12:10 
Hallo Jens,
hier die Einstellung vom SQLConnector:

ausblenden 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:

ausblenden volle Höhe 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
  // Währung speichern
  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
     // updaten
     DB_Versorgen;
     DM4_SEG.UWaehrung.ExecSQL;
  end
  else
  begin
     // insert
     DB_Versorgen;
     DM4_SEG.IWaehrung.ExecSQL;
  end;
  // Durch die Commit-Steuerung werden die Änderungen in der DB resistend
  DM4_SEG.SQLConnection1.Commit(TD);

 except
  // Fehler aufgetreten - es erfolgen keine Änderungen in der DB
  DM4_SEG.SQLConnection1.Rollback(TD);
 end;

  Nummer.SetFocus;
  { Bildschirm löschen }
  Leeren;
end;

function TWaehr.DB_Versorgen : Boolean;
begin
   if WaehrungVorhanden then
   begin
      // Für Update
      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
      // Für Insert
      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 user profile iconMartok: Delphi-Tags gesetzt
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
Params[02].asFloat := StrToFloat(Faktor.text);					

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Anateus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 27.09.10 13:03 
Hallo Jens,
super, es hat funktioniert!
Ich bedanke mich für Deine Hilfe.
Gruß
Anateus