![]() |
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:
habe schon das strtofloat ganz weggelassen, es speichert dann ab, aber nur ganze Zahlen!
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; die anderen beiden Felder (aus Combobox und Datum werden einwandfrei abgespeichert! |
Re: edit-Wert als float in Tabelle speichern
Hallo.
Wenn du das Statement parametrisierst, dann behältst du eher die Übersicht (ungetestet):
Delphi-Quellcode:
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.
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; Grüße vom marabu |
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?? |
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 |
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; |
Re: edit-Wert als float in Tabelle speichern
Zwei Änderungen sind nötig:
Delphi-Quellcode:
marabu
procedure Tmovestock.Button1Click(Sender: TObject);
var dt: TDateTime; fs: TFormatSettings; begin // ... dt := DateTimePicker1.DateTime; // .. Params.ParamByName('datum').Value := dt; // ... end; |
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!!?? |
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 |
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:
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!
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; |
Re: edit-Wert als float in Tabelle speichern
Guten Morgen.
Du kannst in der SET-Klausel des UPDATE Statements Ausdrücke verwenden:
Delphi-Quellcode:
Beim DecimalSeparator musst du mal überlegen, ob du den nicht besser zu Beginn deines Programmes setzt.
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; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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