AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Locate mit einem Floatwert
Thema durchsuchen
Ansicht
Themen-Optionen

Locate mit einem Floatwert

Ein Thema von Polarwar · begonnen am 19. Sep 2007 · letzter Beitrag vom 28. Dez 2020
Antwort Antwort
Polarwar

Registriert seit: 14. Dez 2005
39 Beiträge
 
Delphi 2006 Enterprise
 
#1

Locate mit einem Floatwert

  Alt 19. Sep 2007, 11:36
Datenbank: ADS Foxpro • Version: 8. • Zugriff über: Dataset
Hallo zusammen,

hat jemand von euch schon Erfahrungen gesammelt mit dem Locate auf einer Datenbank mit Floatwerten.
Ich habe irgendwie ein Brett vor dem Kopf und stehe damit auf Kriegsfuß.

Ich möchte in einer Datenbank nach einem Betrag suchen, Beispiel:

dmMain.tbl66.Locate('FELD09',StrToFloat(edtSuchen. Text),[]);

...da meldet sich das Programm mit einem "missmatched.." Fehler. Ich denke das hat was mit dem Komma/Punkt zu tun.
OK, da habe ich mir gedacht tauscht du halt den Seperator aus, aber nix da, da kommt zwar keine Fehlermeldung mehr, das
Locate findet aber nix obwohl es einen Treffer gibt.

Mir kommt es so vor als gäbe es bei Floatwerten Probleme?!??!

naja, warscheinlich bin ich das Problem

Hilfe wäre riesig!!

Danke
Polarwar
Wir haben den Bezug zur Realität verloren, aber die findet uns schon wieder!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Locate mit einem Floatwert

  Alt 19. Sep 2007, 14:45
Hallo,

du solltest bei Float-Werten statt mit Locate() mit einem Filter arbeiten. Dort wählst du ein Intervall, das einen ausreichenden Abstand (eine Zehnerpotenz kleiner als die verwendete Genauigkeit) um deinen Suchwert legt.

Grüße vom marabu
  Mit Zitat antworten Zitat
Polarwar

Registriert seit: 14. Dez 2005
39 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Locate mit einem Floatwert

  Alt 19. Sep 2007, 15:39
Hallo Marabu,

mit einem Filter kann ich auch umgehen....
Ich bin in einer Datenbank unterwegs die ich der Grösse wegen nicht filtern möchte (> 1.000.000),
da die Laufzeit sehr darunter leiden würde.
Einen Findkey kann ich auch nicht nutzen, da mein Feld sich nicht im Index befindet.

Daher möchte/muss ich ein Locate benutzen um auf gewünschten Datensatz zu springen. Nur gehorcht
mir das Dataset nicht so wie ich es mir vorstelle und vorhin beschrieben habe.

Irgendwie muss sich der Locate Befehl doch austricksen lassen, oder auch richtig bedienen lassen,
sodass man auch auf Floatwerte locaten kann...

Gruß
Polarwar
Wir haben den Bezug zur Realität verloren, aber die findet uns schon wieder!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Locate mit einem Floatwert

  Alt 19. Sep 2007, 17:06
Hallo,

ich bin jetzt nicht sicher, ob du mich verstanden hast. Bei der Suche über ein Float-Feld kommst du um eine Intervallsuche nicht herum. Ist die Datenmenge eher klein oder vorselektiert, dann ist ein lokaler Filter sicher kein Problem. Wenn du auf einer großen Tupelzahl suchst, dann tust du das auf dem Server und eine Intervallsuche per SQL ist durch den BETWEEN Operator noch einfacher. Ein Treffer mit Locate() auf einem Float-Feld ist nicht zuverlässig, da die interne Repräsentation des Float-Wertes auf den niederen Bits der Mantisse von Fall zu Fall abweichen kann, jenachdem wie der Float-Wert entstanden ist.

Nochmal mit anderen Worten: Float-Werte werden auch außerhalb von Datenbanken nie auf Gleichheit oder Ungleichheit getestet, es wird immer ein Intervall betrachtet.

Freundliche Grüße
  Mit Zitat antworten Zitat
Polarwar

Registriert seit: 14. Dez 2005
39 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Locate mit einem Floatwert

  Alt 21. Sep 2007, 09:44
Hallo,

danke erstmal für deine Antwort, aber ich bin jetzt nicht sicher, ob DU mich verstanden hast.

Ich möchte einfach nur mit einem einfachen Locate (da ich keinen Findkey verwenden kann) auf den nächsten passenden Datensatz springen und mich vorher nicht gross verbiegen.
Die Datenmenge ist im Aufruf schon auf ungefähr 1 Mio Datensätze gefiltert und ich kann diesen der Anzeige wegen nicht umsetzen. Daher möchte ich mit dem Locate einen bestimmten Datensatz "aufspüren".
Das Floatwerte nicht unbedingt miteinander zu vergliechen sind weiss ich, das gibt unsere Datenbank aber her, da dort nur feste Floatwerte mit gleicher Charakteristik (#####.##) vorkommen. So muss es doch möglich sein mit einem Locate auf Datensätze zu springen.....

Gruß
Polarwar
Wir haben den Bezug zur Realität verloren, aber die findet uns schon wieder!
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#6

Re: Locate mit einem Floatwert

  Alt 21. Sep 2007, 15:01
Zitat von Polarwar:
OK, da habe ich mir gedacht tauscht du halt den Seperator aus, aber nix da, da kommt zwar keine Fehlermeldung mehr, das
Locate findet aber nix obwohl es einen Treffer gibt.
Versuche mal, ob Du mit [loPartialKey] einen Datensatz findest. Auf jeden Fall brauchst Du einen SoftSeek, da es einen exakten Vergleich bei Fließkommazahlen niemals [TM] gibt.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
TheJester

Registriert seit: 8. Sep 2014
1 Beiträge
 
#7

AW: Locate mit einem Floatwert

  Alt 28. Dez 2020, 17:35
Lass die Typumwandlung in Deinem Ausdruck
Zitat:
Code:
dmMain.tbl66.Locate('FELD09',StrToFloat(edtSuchen. Text),[]);
weg. Der Suchwert ist immer ein String, also

Code:
dmMain.tbl66.Locate('FELD09',edtSuchen.Text,[]);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Locate mit einem Floatwert

  Alt 28. Dez 2020, 19:00
Nein, die ist ein Variant, bzw. ein Array aus Variants (bei mehreren Suchfeldern).
Nach was für einem Typen gesucht wird, das hängt von dem Typen des/der Feldes ab, in dem gesucht wird.

loPartialKey hilft nur bei "Strings"

und wie schon erwähnt, ist die "genaue" Suche nach einem "Float" nicht immer möglich, da ein genauer Vergleich oft garnicht funktioniert, bei solchen "ungenauen" Fließkommatypen.


[edit]
Grad gemerkt, dass der Thread jahrzehnte alt ist,
aber prinzipiell ändert sich nichts an den Aussagen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:13 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