Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi edit-Wert als float in Tabelle speichern (https://www.delphipraxis.net/64170-edit-wert-als-float-tabelle-speichern.html)

tom_po 28. Feb 2006 14:17


edit-Wert als float in Tabelle speichern
 
Ich habe eine DBisam-Tabelle mit einem field "in" vom Data-Typ "float"

ich möchte mit dem folgenden query einen Wert (z.B. 50,22)von edit1 darin abspeichern, bekomme aber schon beim Compilieren die Fehlermeldung:
[Fehler] movestockunit.pas(57): Inkompatible Typen: 'String' und 'Extended'

Delphi-Quellcode:
procedure Tmovestock.Button1Click(Sender: TObject);
var Date:TDate;
Timesetting:TFormatSettings;
begin
TimeSetting.LongDateFormat:='yyyy-MM-dd';
TimeSetting.ShortDateFormat:='yyy-MM-dd';
date:=DateTimePicker1.Date;
dbisamquery1.SQL.Clear;
dbisamquery1.SQL.add('insert into stockfabric (code,in,date) values ('+quotedstr(combobox1.Text)+','+strtofloat(edit1.Text)+','+quotedstr(datetostr(date,Timesetting))+')');
dbisamquery1.ExecSQL;
edit1.Text:='';
combobox1.Text:='';
end;
habe schon das strtofloat ganz weggelassen, es speichert dann ab, aber nur ganze Zahlen!
die anderen beiden Felder (aus Combobox und Datum werden einwandfrei abgespeichert!

marabu 28. Feb 2006 18:21

Re: edit-Wert als float in Tabelle speichern
 
Hallo.

Wenn du das Statement parametrisierst, dann behältst du eher die Übersicht (ungetestet):

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  dt: TDateTime;
  fs: TFormatSettings;
begin
  // weil du im Edit keinen Dezimalpunkt verwendest:
  fs.DecimalSeparator := ',';

  dt := DateTimePicker1.Date;
  with dbisamquery1 do
  begin
    SQL.Text := 'insert into stockfabric(code, in, date) '
              + 'values (:code, :in, :date)';
    Parameters.ParamByName('code').Value := combobox1.Text;
    Parameters.ParamByName('in').Value := StrToFloat(edit1.Text);
    Parameters.ParamByName('date').Value := date;
    ExecSQL;
  end;
  edit1.Text := '';
  combobox1.Text := '';
end;
Mir wäre allerdings wohler, wenn du deine Datenbankfelder nicht IN und DATE nennen würdest. Ist vielleicht im Augenblick kein Problem für dich, aber erschwert eine Portierung.

Grüße vom marabu

tom_po 28. Feb 2006 19:07

Re: edit-Wert als float in Tabelle speichern
 
danke marabu, werde schauen, dass ich die feldnamen umbenenne.

Wollte mal deinen Vorschlag testen, kam aber die Meldung
[Fehler] movestockunit.pas(87): Undefinierter Bezeichner: 'Parameters'

muss ich da noch bei uses was einfügen, dass er dies findet??

marabu 28. Feb 2006 19:22

Re: edit-Wert als float in Tabelle speichern
 
Bei meinen ADO-Komponenten heißt die Eigenschaft Parameters, bei den BDE-Komponenten heißt sie Params - wie heißt sie denn bei dir?

marabu

tom_po 28. Feb 2006 19:44

Re: edit-Wert als float in Tabelle speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
suuuuper, es funktioniert marabu, bei mir heisst es params!

habe jetzt aber noch das problem, dass obwohl ich als datatype in meiner dbisam-tablle timestamps habe, die uhrzeit nicht übernommen wird, bleibt immer 00
(siehe Bild)

code sieht jetzt so aus, habe noch die feldnamen geändert:

Delphi-Quellcode:
procedure Tmovestock.Button1Click(Sender: TObject);
var
  dt: TDateTime;
  fs: TFormatSettings;
begin
  // weil du im Edit keinen Dezimalpunkt verwendest:
  fs.DecimalSeparator := ',';
  dt := DateTimePicker1.Date;
  with dbisamquery1 do
  begin
    SQL.Text := 'insert into movestock(code, eingang, datum) '
              + 'values (:code, :eingang, :datum)';
    Params.ParamByName('code').Value := combobox1.Text;
    Params.ParamByName('eingang').Value := StrToFloat(edit1.Text);
    Params.ParamByName('datum').Value := date;
    ExecSQL;
  end;
  edit1.Text := '';
  combobox1.Text := '';
end;

marabu 28. Feb 2006 19:55

Re: edit-Wert als float in Tabelle speichern
 
Zwei Änderungen sind nötig:

Delphi-Quellcode:
procedure Tmovestock.Button1Click(Sender: TObject);
var
  dt: TDateTime;
  fs: TFormatSettings;
begin
  // ...
  dt := DateTimePicker1.DateTime;
  // ..
    Params.ParamByName('datum').Value := dt;
  // ...
end;
marabu

tom_po 28. Feb 2006 20:29

Re: edit-Wert als float in Tabelle speichern
 
ich hatte ursprünglich von einer ähnlichen Form den datetimepicker übernommen, da wurde aber noch IdTimeUDP verwendet.

In meiner neuen Form habe ich das nicht verwendet. Liegt es jetzt daran, dass das aktuelle Datum des PC's im Datetimepicker nicht angezeigt wird, sondern das Datum und Uhrzeit die festeingestellt sind bei den Eigenschaften des Datetimepickers!!??

tom_po 28. Feb 2006 21:41

Re: edit-Wert als float in Tabelle speichern
 
hatte das vergessen bei onformschow:
Datetimepicker1.Date:=Date;
Datetimepicker1.Time:=Time;

jetzt habe ich das aktuelle datum mit der richtigen Uhrzeit vielen Dank, marabu

tom_po 28. Feb 2006 22:24

Re: edit-Wert als float in Tabelle speichern
 
Ich möchte jetzt noch bei Klick des Button1 den Wert, den ich im edit1 eingebe hinzuaddieren zum bereits bestehenden Wert (feld "stock") des feldes "code" (=combobox1.text) der tabelle "stockfabric"

mein jetziger code ist so:

Delphi-Quellcode:
procedure Tmovestock.Button1Click(Sender: TObject);
var
  dt: TDateTime;
  fs: TFormatSettings;
begin
  // weil du im Edit keinen Dezimalpunkt verwendest:
  fs.DecimalSeparator := ',';
  dt := DateTimePicker1.DateTime;
  with dbisamquery1 do
  begin
    SQL.Text := 'insert into movestock(code, eingang, datum) '
              + 'values (:code, :eingang, :datum)';
    Params.ParamByName('code').Value := combobox1.Text;
    Params.ParamByName('eingang').Value := StrToFloat(edit1.Text);
    Params.ParamByName('datum').Value := dt;
    ExecSQL;
  end;
  begin
  dbisamquery4.SQL.Clear;
  dbisamquery4.sql.Add('update stockfabric set stock = '+edit1.Text+' where code = '+quotedstr(combobox1.Text));
  dbisamquery4.ExecSQL;
  end;
  edit1.Text := '';
  combobox1.Text := '';
end;
das heisst, ich schaffe es, edit1 zu übernehmen, ich möchte ihn jedoch hinzuaddieren zum bestehenden wert des feldes "stock", das auch den datatyp float hat!

marabu 1. Mär 2006 05:59

Re: edit-Wert als float in Tabelle speichern
 
Guten Morgen.

Du kannst in der SET-Klausel des UPDATE Statements Ausdrücke verwenden:

Delphi-Quellcode:
procedure Tmovestock.Button1Click(Sender: TObject);
var
  dt: TDateTime;
  fs: TFormatSettings;
begin
  // weil du im Edit keinen Dezimalpunkt verwendest:
  fs.DecimalSeparator := ',';
  dt := DateTimePicker1.DateTime;
  with dbisamquery1 do
  begin
    SQL.Text := 'insert into movestock(code, eingang, datum) '
              + 'values (:code, :eingang, :datum)';
    Params.ParamByName('code').Value := combobox1.Text;
    Params.ParamByName('eingang').Value := StrToFloat(edit1.Text);
    Params.ParamByName('datum').Value := dt;
    ExecSQL;

    SQL.Text := 'update stockfabric set stock = stock + :stock where code = :code';
    Params.ParamByName('code').Value := combobox1.Text;
    Params.ParamByName('stock').Value := StrToFloat(edit1.Text);
    ExecSQL;
  end;
  edit1.Text := '';
  combobox1.Text := '';
end;
Beim DecimalSeparator musst du mal überlegen, ob du den nicht besser zu Beginn deines Programmes setzt.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Seite 1 von 2  1 2      

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