AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Auslesen von Float Werten
Thema durchsuchen
Ansicht
Themen-Optionen

Auslesen von Float Werten

Ein Thema von Starstruck · begonnen am 25. Nov 2009 · letzter Beitrag vom 25. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
Starstruck

Registriert seit: 6. Apr 2009
Ort: Hessen
21 Beiträge
 
#1

Auslesen von Float Werten

  Alt 25. Nov 2009, 09:09
Datenbank: SQLite • Version: 3.6 • Zugriff über: ZEOS
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
ZQueryRead.FieldByName('size').AsFloat geht jedenfalls nicht.
Wenn ich die Werte so
ZQueryRead.FieldValues['size'] auslese erhalte ich Strings die so ausehen:
1.0
1.5
4.0

Hat da jemand eine Idee? Oder mach ich da was falsch?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 09:19
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:
DecimalSeparator := '.';
ZQueryRead.FieldByName('size').AsFloat
Das ist allerdings eine sehr unschöne Art und Weise!

Ich wette in der DB hast du Size als CHAR oder VARCHAR deklariert.. Du solltest wie gesagt besser den Feldtyp in Float ändern
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Starstruck

Registriert seit: 6. Apr 2009
Ort: Hessen
21 Beiträge
 
#3

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 09:29
Zitat von Neutral General:
Delphi-Quellcode:
DecimalSeparator := '.';
ZQueryRead.FieldByName('size').AsFloat
An sowas hatte ich auch schon gedacht, aber wie Du schon sagst - es ist nicht wirklich schön.
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 '.'!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#4

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 09:36
Du erstellst dir entweder eine Funktion, welche es als String ausließt und dann umwandelt.
(Delphi-Referenz durchsuchenStr und Delphi-Referenz durchsuchenVal nutzen immer den Punkt als Dezimalzeichen)

Oder (aber dazu würde ich nicht raten) du stellst wärend des Auslesens den Delphi-Referenz durchsuchenDecimalSeparator kurz um.
[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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 09:38
Zitat von Starstruck:
Zitat von Neutral General:
Delphi-Quellcode:
DecimalSeparator := '.';
ZQueryRead.FieldByName('size').AsFloat
An sowas hatte ich auch schon gedacht, aber wie Du schon sagst - es ist nicht wirklich schön.
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 '.'!
Wie die Werte angezeigt werden, ist prinzipiell Sache des Programms und von daher sagt das nichts aus würde ich mal behaupten. Außer, dass dein Feld wahrscheinlich wirklich ein Float-Feld ist.

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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Starstruck

Registriert seit: 6. Apr 2009
Ort: Hessen
21 Beiträge
 
#6

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 10:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 10:33
Zeig mal deine Query
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Starstruck

Registriert seit: 6. Apr 2009
Ort: Hessen
21 Beiträge
 
#8

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 10:46
Beispiel Query
SQL-Code:
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
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 11:10
Nutzt Du persistente Felder für deise Query?
Wenn ja, lösch die alle mal und erzeuge sie neu.


Sherlock
Oliver
  Mit Zitat antworten Zitat
Starstruck

Registriert seit: 6. Apr 2009
Ort: Hessen
21 Beiträge
 
#10

Re: Auslesen von Float Werten

  Alt 25. Nov 2009, 11:51
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 ?
  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:23 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