![]() |
Datenbank: SQLite • Version: 3.6 • Zugriff über: ZEOS
Auslesen von Float Werten
Hallo,
ich habe ein Problem mit dem Auslesen von Float Werten aus meiner SQLite Datenbank. In der DB wird als Dezimaltrennzeichen offensichtlich ein '.' verwendet. Wenn ich jetzt die Werte auslesen will bekommt ich natürlich die Fehlermeldung dass der Wert kein Float Typ ist, da ich in meinem Programm/System ja ein ',' als Dezimaltrennzeichen habe. Wie bekomme ich nun korrekte Werte aus meiner DB? Für den Zugriff auf SQLite verwende ich ZEOS 6.6.5
Delphi-Quellcode:
geht jedenfalls nicht.
ZQueryRead.FieldByName('size').AsFloat
Wenn ich die Werte so
Delphi-Quellcode:
auslese erhalte ich Strings die so ausehen:
ZQueryRead.FieldValues['size']
1.0 1.5 4.0 Hat da jemand eine Idee? Oder mach ich da was falsch? |
Re: Auslesen von Float Werten
Hi,
Kann es sein, dass "Size" in deiner DB-Tabelle ein Stringfeld ist? Dann würde ich das mal ändern.. Ansonsten kannst du notfalls noch versuchen:
Delphi-Quellcode:
Das ist allerdings eine sehr unschöne Art und Weise!
DecimalSeparator := '.';
ZQueryRead.FieldByName('size').AsFloat Ich wette in der DB hast du Size als CHAR oder VARCHAR deklariert.. Du solltest wie gesagt besser den Feldtyp in Float ändern |
Re: Auslesen von Float Werten
Zitat:
Der Feldtyp in der DB ist wirklich Float. Ich habe die DB mit SQLite Administrator angelegt und zur Sicherheit mit dem SQLite Manager (Firefox AddOn) geprüft. Ich hab den Feld Typ auch mal auf Real umgestellt. Hat aber auch nix gebracht. Komischerweise kann man im SQLite Manager auch String Werte speichern! Im SQLite Administrator geht das nicht ! Der SQLite Administrator zeigt übrigens die Werte mit ',' an, der SQLite Manager mit '.'! |
Re: Auslesen von Float Werten
Du erstellst dir entweder eine Funktion, welche es als String ausließt und dann umwandelt.
( ![]() ![]() Oder (aber dazu würde ich nicht raten) du stellst wärend des Auslesens den ![]() [edit] wurde schon gesagt [/edit] Oder, man erstellt sich 'nen neues Property für TField, welches den ersten Vorschlag nutzt (geht aber nur in neueren Delphi-Versionen)
Delphi-Quellcode:
type
TFieldHelper = class Helper for TField private function GetAsFloatEx: Double; public property AsFloatEx: Double read GetAsFloatEx; end; function TFieldHelper.GetAsFloatEx: Double; var e: Integer; begin Val(AsString, Result, e); //if e > 0 then Exception_oder_so; end; |
Re: Auslesen von Float Werten
Zitat:
Was du mal machen könntest ist ZQueryRead.FieldByName('size').DataType zu überprüfen. Wobei es auch sein kann, dass es FieldType heißt. Da steht ja drin welchen Typ das Feld hat, oder notfalls für welchen Typ Zeos dieses Feld hält :stupid: |
Re: Auslesen von Float Werten
Hallo,
also ich habe jetzt die Lösung von himitsu umgesetzt, nur halt als einfache Funktion und nicht als neue Propertie von Tfield. Das muss ich mir später nochmal anschauen. @Neutral General Du hast Recht. Offensichtlich wird mein Feld als String erkannt. Trotzdem kann ich bei SELECT Befehlen mit < und > suchen bzw filtern. Nochmals Danke an alle. |
Re: Auslesen von Float Werten
Zeig mal deine Query
|
Re: Auslesen von Float Werten
Beispiel Query
SQL-Code:
Ich habe mal versuchsweise einen Text in das 'size' Feld geschrieben. Eigentlich sollte er dann nicht mit ausgelesen werden. Wird er aber doch. Ist aber auch nicht so schlimm später werden ja eh nur Float Werte zugelassen.
SELECT t.model as model, max(t.size) as size
FROM device_tbl as t WHERE t.size > 2 GROUP BY t.model ORDER BY t.model DESC LIMIT 0, 30 |
Re: Auslesen von Float Werten
Nutzt Du persistente Felder für deise Query?
Wenn ja, lösch die alle mal und erzeuge sie neu. Sherlock |
Re: Auslesen von Float Werten
Da ich nicht weiss was persistente Felder sind, denke ich mal dass das nicht so ist!
Aber wie könnte ich feststellen ob ich persistente Felder verwende und was genau ist das - vorformatierte Felder ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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