Komma zahlen in eine Datenbank speichern?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Komma zahlen in eine Datenbank speichern?

Beitrag von TT73GP7 »

Hallo Zusammen,

wie kann ich ein Komma zahlen wert mit Insert into in eine Datenbank schreiben?

Code: Alles auswählen

 
cSQL := 'Insert Into Preis (STD_Preis) Values ("'+edit1.text+'")';
 


hat jemand eine Idee?
ich würde ungerne ein DBEdit nehmen

VG
:)

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von Mathias »

Evt. nützt dir FloatToStr oder StrToFloat etwas.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von af0815 »

Parameter benutzen wie hier zum Beispiel

Code: Alles auswählen

 
SQLQuery1.SQL.Text := 'Insert Into Preis (STD_Preis) Values (:PREIS)';
SQLQuery1.Params.ParamByName('PREIS').AsFloat := StrToFloat(edit1.text);
 
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von TT73GP7 »

achso?

das kannte ich noch garnicht
vielen dank das werde ich nachher gleich mal ausprobieren

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von TT73GP7 »

af0815 hat geschrieben:Parameter benutzen wie hier zum Beispiel

Code: Alles auswählen

 
SQLQuery1.SQL.Text := 'Insert Into Preis (STD_Preis) Values (:PREIS)';
SQLQuery1.Params.ParamByName('PREIS').AsFloat := StrToFloat(edit1.text);
 



hach das wäre so schön gewesen
unter Win7 läuft es tadellos
Unter Win10 werden zwei sätze in die Datenbank geschrieben?

der Einsatz ist leer und hat den betrag drin
der andere ist ganz normal mit Betrag gefüllt

wodran kann sowas liegen?
und wie geht man an besten an solche fehler dran?

Code: Alles auswählen

 
 
  zArtikelInsert.SQL.Text := 'insert into dbArtikel ("Artikelname", "FK_ArtikelTyp", "Beschreibung", "STD_PREIS") Values ("'+edArtikelname.text+'","'+cArtikelTypID+'","'+mBeschreibung.text+'",:PREIS)';
  zArtikelInsert.ParamByName('PREIS').AsFloat := StrToFloat(DBEd_STD_PREIS.Text);
  zArtikelInsert.Active   := True;   
 
 


viele grüße
:)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von af0815 »

TT73GP7 hat geschrieben:wodran kann sowas liegen?
und wie geht man an besten an solche fehler dran?


K.A.

Das ganze auf eine Testapplikation übertragen,so simple wie möglich, wo nur der Fehler provoziert wird. Ev. das ganze im Einzelschritt durchsteppen und immer wieder nachsehen wo genau der zweite Datensatz herkommt. Ev. die Tools des SQLServers (SQL Monitor,...) verwenden und mit sehen wann wo was kommt.

BTW: Entweder alles mit Parametern oder nichts. Mit den Parametern kann man die Query immer gleich lassen und muss nichts dauern am SQL-Statement ändern.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von af0815 »

Aus den Lazinfos so um Seite 66

Code: Alles auswählen

Active, Open oder ExecSQL
... das ist hier die Frage ? Um diese Frage zu beantworten, muß man sich vor Augen halten, was man von der Komponente will. Mittels dem Befehl Open bzw. Active fordert man eine Datenmenge an. Mit ExecSQL wird nur eine Aktion angefordert ohne das eine Datenmenge zurück erwartet wird.
......
Zusammenfassung:
• Open, Active: Bei der Verwendung von ’SELECT’
• ExecSQL: Für alle anderen Statements 'INSERT', 'UPDATE', 'DELETE'


Deshalb sollte bei Dir ExecSQL statt Active verwendet werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von TT73GP7 »

hmm das mit dem ExecSQL ist ein sehr guter hinweiß

was mich grad richtig nervt das ich eigentlich nur Win7 nutze und nicht eine Lizenz für Win10 habe

ich glaube ich muss mir zum testen noch eine Win10 Lizenz kaufen
hach das macht es alles nicht einfacher :(

aber ich werde das alles kommende woche sehen :)

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von wp_xyz »

Da hast du dich aber ganz schön eingeigelt, dass du nicht mitgekriegt hast, dass Win10 ein Jahr lang kostenlos war.

Wenn es wirklich nur um kurze Tests geht, könntest du dir eine VirtualBox einrichten und darauf die offizielle Win10 Version installieren. Die läuft ohne Registrierung zwar nur 90 Tage, stellt danach aber nicht die Arbeit ein, sondern fährt nach 1 Stunde nur die VM herunter (zumindest macht das mein Win8.1 so). Nach dem Neustart der VM geht es wieder. Das ist zwar im Prinzip nervig, aber wenn du wirklich nur kurz etwas testen willst, spielt das kaum eine Rolle.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von MacWomble »

Win 10 gibt es lt. Presse für Menschen mit Handicap nach wie vor kostenlos. Eine Prüfung findet wohl nicht statt. :wink:

Allerdings würde ich mir die Lizenzbestimmung aufmerksam durchlesen und überlegen, ob ich wirklich nicht näher genannten Unternehmen den Zugriff auf mein System samt Peripherie genehmigen möchte (was man mit der Installation durch Annahme der EULA tut)
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von TT73GP7 »

hach ja ich ärgere mich ja auch etwas

aber mein rechner packt das nicht mehr
ich brauche dringend einen neuen und ich kann mich noch nicht so festlegen

weil er so klein wie nur möglich sein soll
und dennoch power haben soll
und am liebsten nix kosten darf :(

ergo unmöglich
hach

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von af0815 »

TT73GP7 hat geschrieben:ich brauche dringend einen neuen und ich kann mich noch nicht so festlegen


Komplett neu aufsetzen, nur mit den Dingen die man wirklich braucht hat schon so manchen alten Rechner sehr stark beschleunigt. :mrgreen:

und kostet ausser Arbeit nicht viel
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von hubblec4 »

TT73GP7 hat geschrieben:Hallo Zusammen,

wie kann ich ein Komma zahlen wert mit Insert into in eine Datenbank schreiben?

Code: Alles auswählen

 
cSQL := 'Insert Into Preis (STD_Preis) Values ("'+edit1.text+'")';
 


hat jemand eine Idee?
ich würde ungerne ein DBEdit nehmen

VG
:)


Ich habe das bisher immer so gelöst:
In der SQL DB ist deine spalte als type auf float eingestellt ist, daher wird im SQL-Text ein String benötigt der als Dezimaltrenner einen Punkt(.) hat.
Da aus Lazarus oft Floatwerte mit einem Komma(,) als Dezimaltrenner kommen, ersetze ich den einfach mit StringReplace

Code: Alles auswählen

cSQL := 'Insert Into Preis (STD_Preis) Values ("'+StringReplace(edit1.text,',','.',[rfIgnoreCase])+'")';


Vielleicht nicht die beste Lösung, aber sie war damals für mich die einfachste.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von af0815 »

hubblec4 hat geschrieben:Ich habe das bisher immer so gelöst:
In der SQL DB ist deine spalte als type auf float eingestellt ist, daher wird im SQL-Text ein String benötigt der als Dezimaltrenner einen Punkt(.) hat.
Da aus Lazarus oft Floatwerte mit einem Komma(,) als Dezimaltrenner kommen, ersetze ich den einfach mit StringReplace


Das ist das beste Beispiel für mich, wie man es nicht machen sollte. Wenn jetzt für den DB Server genauso die Ländereinstellungen auf Deutsch sind (Bsp. MS-SQL unter Windows), dann liegst du mit der Annahme daneben. Ich hatte jahrelang das Vergnügen deutsch/deutsch, deutsch/englisch, englisch/deutsch, chinesisch/englisch, chinesisch/deutsch, ... zu betreuen und auch dafür Auswertsoftware zu programmieren.

KONKLUSIO: Nimm ja keine Stringverwaltung zum Zusammenfrickeln der Daten in SQL-Statments.
  • Öffnet Exploits und Injections die Tür
  • Verhält sich bei geringfügigen Änderungen (Sprache/Serverstandort/Verbindung) nicht vorhersehbar

Das läuft auf genau einer Plattform bzw. Spracheinstellung zu einer Zeit. Erzeugt Probleme die in produktiver Umgebung schwer zu finden, lästig und IMHO unnötig sind. Machmal lassen sich die Kontrukte wie du oben gemacht hast, bei der Erstellung der Parameter nicht ganz vermeiden, da habe ich aber die Möglichkeit das ganze mit dem Benutzer interaktiv zu beheben und nicht dann wenn ich die Daten Richtung Server geknallt habe.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Komma zahlen in eine Datenbank speichern?

Beitrag von hubblec4 »

OK. Danke für die Erklärung, werde mir das dann wohl mal etwas näher anschauen müssen. War bis jetzt noch nie das ich mit solchen Ländereinstellungen konfroniert worden bin.

Was die SQL-Params betrifft:
Muss ich dann für alle meine SQL-Statments(befehle) die ich verwende einen eigenen Param vordefinieren?

Denke mal ich habe an die 200 verschiedene Befehle und davon sind die meisten INSERT oder UPDATE und nur wenige SELECT.
Die Befehle haben auch teilweise über 1000 zeichen SQL-Code.

Antworten