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+'")';
ich würde ungerne ein DBEdit nehmen
VG

Code: Alles auswählen
cSQL := 'Insert Into Preis (STD_Preis) Values ("'+edit1.text+'")';
Code: Alles auswählen
SQLQuery1.SQL.Text := 'Insert Into Preis (STD_Preis) Values (:PREIS)';
SQLQuery1.Params.ParamByName('PREIS').AsFloat := StrToFloat(edit1.text);
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);
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;
K.A.TT73GP7 hat geschrieben: wodran kann sowas liegen?
und wie geht man an besten an solche fehler dran?
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'
Komplett neu aufsetzen, nur mit den Dingen die man wirklich braucht hat schon so manchen alten Rechner sehr stark beschleunigt.TT73GP7 hat geschrieben:ich brauche dringend einen neuen und ich kann mich noch nicht so festlegen
Ich habe das bisher immer so gelöst:TT73GP7 hat geschrieben:Hallo Zusammen,
wie kann ich ein Komma zahlen wert mit Insert into in eine Datenbank schreiben?
hat jemand eine Idee?Code: Alles auswählen
cSQL := 'Insert Into Preis (STD_Preis) Values ("'+edit1.text+'")';
ich würde ungerne ein DBEdit nehmen
VG
Code: Alles auswählen
cSQL := 'Insert Into Preis (STD_Preis) Values ("'+StringReplace(edit1.text,',','.',[rfIgnoreCase])+'")';
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.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