AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

edit-Wert als float in Tabelle speichern

Ein Thema von tom_po · begonnen am 28. Feb 2006 · letzter Beitrag vom 1. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#1

edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 15:17
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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 19:21
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
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 20:07
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??
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 20:22
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
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 20:44
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;
Miniaturansicht angehängter Grafiken
time_826.jpg  
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 20:55
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
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 21:29
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!!??
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 22:41
hatte das vergessen bei onformschow:
Datetimepicker1.Date:=Date;
Datetimepicker1.Time:=Time;

jetzt habe ich das aktuelle datum mit der richtigen Uhrzeit vielen Dank, marabu
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: edit-Wert als float in Tabelle speichern

  Alt 28. Feb 2006, 23:24
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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: edit-Wert als float in Tabelle speichern

  Alt 1. Mär 2006, 06:59
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:32 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