Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Komma eingabe (https://www.delphipraxis.net/49909-komma-eingabe.html)

cell 18. Jul 2005 08:08


Komma eingabe
 
morgen
hab eine frage zum rechnen!!!
wie mach ich das in delphi, wenn ich eine Kommazahl eingeben will ??? Wenn ich einen punkt mache dann kommt "bitte eine Zahl eingeben" (das ist meine Fehlermeldung, was ich geschrieben habe)
und wenn ich ein "," eingebe dann kommt "Falscher Syntax in nähe von 'Friktionstest'"
Friktionstest ist die Tabelle in meiner SQL abfrage.
hat jemand eine idee

thx

Bernhard Geyer 18. Jul 2005 08:13

Re: Komma eingabe
 
:wiejetzt:

Erklär nochmal genauer was du machst. Der zweite Teil deutet daraufhin das du eine SQL-Anweisung formulierst und diese die falsche Syntax hat.

Wenn Du noch etwas Code posten würdest so wäre die Hilfe einfacher.

cell 18. Jul 2005 08:19

Re: Komma eingabe
 
Delphi-Quellcode:
Query.close;
       Query.SQL.Clear;
       if ((txtscheibe.Text = '') Or (txtbelagvo.Text='') Or (txtbelagvu.Text='') Or (txtbelagho.Text='') Or (txtbelaghu.Text='') Or (txtbelagvo_end.Text='') Or (txtbelagvu_end.Text='') Or (txtbelagho_end.Text='') Or (txtbelaghu_end.Text='')) then
       begin
       Showmessage('Bitte geben Sie einen Wert ein');
       frmgewichtaendern.Show;
       end
       else
       
           if isFloat(txtscheibe.Text) and isFloat(txtbelagvo.Text) and isFloat (txtbelagvu.Text) and isFloat (txtbelagho.Text) and isFloat(txtbelaghu.Text) and isFloat(txtscheibe_end.Text) and isFloat(txtbelagvo_end.Text) and isFloat(txtbelagvu_end.Text) and isFloat(txtbelagho_end.Text) and isFloat(txtbelaghu_end.Text) then
           
           begin
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Anfangsgewicht_Scheibe',txtscheibe.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Anfangsgewicht_Belag_vorne_oben',txtbelagvo.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Anfangsgewicht_Belag_vorne_unten',txtbelagvu.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Anfangsgewicht_Belag_hinten_oben',txtbelagho.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Anfangsgewicht_Belag_hinten_unten',txtbelaghu.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Endgewicht_Scheibe',txtscheibe_end.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Endgewicht_Belag_vorne_oben',txtbelagvo_end.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Endgewicht_Belag_vorne_unten',txtbelagvu_end.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Endgewicht_Belag_hinten_oben',txtbelagho_end.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                Query.SQL.Text:=updatesqlz('Friktionstest', 'Endgewicht_Belag_hinten_unten',txtbelaghu_end.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
                Query.ExecSQL;
                while not Query.Eof do
                Query.Close;
           end
           else
               ShowMessage('Bitte eine Zahl eingeben!');
       end;
das ist der code wo der fehler kommt
Delphi-Quellcode:
function updatesqlz (tabellennamez, feldnamez, aenderungz, whereanweisungz :string) :string;
//------------------------------------------------------------------------------
// UPDATE Funktion
//------------------------------------------------------------------------------
var
   ant: string;
begin
     ant :='UPDATE ' + #39+ tabellennamez +#39;
     ant :=ant + ' SET ' + feldnamez;
     ant :=ant + ' = ' +  aenderungz ;
     if whereanweisungz <> '' then
        ant :=ant + ' WHERE ' + whereanweisungz;
     result:= ant;
end;
das ist der code für den sql befehl
mein problem ist dass er eine fehlermeldung ausgibt wenn ich eine kommazahl eingeben will
zb.: 3,75 da regt er sich über das komma auf und über solche zeilen
Delphi-Quellcode:
Query.SQL.Text:=updatesqlz('Friktionstest', 'Anfangsgewicht_Scheibe',txtscheibe.Text,'Testnummer = ' +frmtestauswahl.cbotestnummer.Text);
und bei einen punkt zb.: 3.75 kennt er das als text an
???

WoGe 18. Jul 2005 08:29

Re: Komma eingabe
 
Hallo,

in SQL ist ein Komma ein TRENN-Zeichen. Also übergib doch am besten einen Float-Parameter

mfg
wo

cell 18. Jul 2005 08:31

Re: Komma eingabe
 
was meinst du mit float parameter ??

DP-Maintenance 18. Jul 2005 08:43

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Sonstige Fragen zu Delphi" nach "Datenbanken" verschoben.
Das Problem geht, glaube ich, mehr in richtung Datenbanken.

Sharky 18. Jul 2005 08:45

Re: Komma eingabe
 
Hai cell,

als welcher Typ sind die einzelnen Felder denn in der Datenbank-Tabelle deklariert worden?

Ansonsten ist es so: Datenbanken musst Du in der Regel einen Flieskommewert mit einem . (punkt) als Dezimaltrennzeichen übergeben.

SQL-Code:
UPDATE tabelle SET feldname = 3.44 WHERE bedingung

WoGe 18. Jul 2005 08:59

Re: Komma eingabe
 
Zitat:

Zitat von Sharky
SQL-Code:
UPDATE tabelle SET feldname = 3.44 WHERE bedingung

das SQL-Statement von Sharky würde parrametrisiert so aussehen

SQL-Code:
UPDATE tabelle SET feldname = :myParam WHERE bedingung
und in deinem Source müsste stehen

Code:
myQry.ParamByName('myParam').AsFloat := StrToFloat('3,44');
mfg
wo

[edit] Sorry hatte die Hochkommas vergessen[/edit]

cell 18. Jul 2005 09:05

Re: Komma eingabe
 
@sharky
das sind alles float zahlen!
wenn ich einen punkt eingebe dann sagt er mir dass das ein text ist, ich habs mal mit anführungszeichen probiert also so
Delphi-Quellcode:
var
   ant: string;
begin
     ant :='UPDATE ' + #39+ tabellennamez +#39;
     ant :=ant + ' SET ' + #39+ feldnamez +#39;
     ant :=ant + ' = ' + #39+  aenderungz +#39;
     if whereanweisungz <> '' then
        ant :=ant + ' WHERE ' + whereanweisungz;
     result:= ant;
end;
funktioniert aber auch ned

@woge
Delphi-Quellcode:
myQry.ParamByName(myParam).AsFloat := StrToFloat('3,44');
die zeile versteh ich ned :(
sry

WoGe 18. Jul 2005 09:19

Re: Komma eingabe
 
Zitat:

Zitat von cell
@woge
Delphi-Quellcode:
myQry.ParamByName('myParam').AsFloat := StrToFloat('3,44');
die zeile versteh ich ned :(
sry

Das ist die Methode der Übergabe eines SQL-Parameters durch ein TQuery-Object.
Lies mal in der Delphi Hilfe

mfg
wo

Sharky 18. Jul 2005 09:31

Re: Komma eingabe
 
Hai cell,

ich habe mir deinen obigen Code noch einmal angesehen :shock:
Eines verstehe ich nicht. Warum machst Du für jede Änderung ein eigenes .ExecSQL? Viel einfacher, und übersichtlicher, wäre es doch das alles in einem Rutsch zu machen. Auch ist das mit der Funktion updatesqlz nicht so glücklich.
Um genau helfen zu können müsste man natürlich wissen welche Datenbank Du verwendest und wie Du auf diese zugreiffst.

Ich würde das ganze einfach so machen (die Fehlerprüfungen müssen natürlich noch rein:
Delphi-Quellcode:
begin
  Query1.Close;
  Query1.SQL.Text :=
    'UPDATE friktionstest ' + #10 +
    'SET ' + #10 +
    'Anfangsgewicht_Scheibe = :pAnfangsgewicht_Scheibe ,' + #10 +
    'Anfangsgewicht_Belag_vorne_oben = :pAnfangsgewicht_Belag_vorne_oben ,' + #10 +
    'Anfangsgewicht_Belag_vorne_unten = :pAnfangsgewicht_Belag_vorne_unten ,' + #10 +
    'Anfangsgewicht_Belag_hinten_oben = :pAnfangsgewicht_Belag_hinten_oben ,' + #10 +
    'Anfangsgewicht_Belag_hinten_unten = :pAnfangsgewicht_Belag_hinten_unten ,' + #10 +
    'Endgewicht_Scheibe = :pEndgewicht_Scheibe ,' + #10 +
    'Endgewicht_Belag_vorne_oben = :pEndgewicht_Belag_vorne_oben ,' + #10 +
    'Endgewicht_Belag_vorne_unten = :pEndgewicht_Belag_vorne_unten ,' + #10 +
    'Endgewicht_Belag_hinten_oben = :pEndgewicht_Belag_hinten_oben ,' + #10 +
    'Endgewicht_Belag_hinten_unten = :pEndgewicht_Belag_hinten_unten ' + #10 +
    'WHERE Testnummer = :pTestnummer';
  Query1.ParamCheck := True; // Parameter verarbeiten. EinParameter
                             // beginnt in der SQL-Anweisung mit einem :
  with Query1 do
  begin
    ParamByName(':pAnfangsgewicht_Scheibe').AsFloat := StrToFloat(txtscheibe.Text);
    ParamByName(':pAnfangsgewicht_Belag_vorne_oben').AsFloat := StrToFloat(txtbelagvo.Text);
    // Hier die weiteren Parameter für das SET
    ParamByName('pTestnummer').AsInteger := IntToStr (frmtestauswahl.cbotestnummer.Text);
    ExecSQL;
  end;
end;

Jelly 18. Jul 2005 11:00

Re: Komma eingabe
 
In SQL werden Kommazahlen durch Punkte (.) getrennt. Auf deinem Windows allerdings werden Kommazahlen sicherlich mit einem Komma (,) ein- und ausgegeben. Da liegt der Fehler.

jfheins 18. Jul 2005 11:05

Re: Komma eingabe
 
Schreib' einfach z.B. im OnCreate ein
Delphi-Quellcode:
   DecimalSeparator := '.';
;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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