AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TDataSet.Locate funktioniert nicht bei ....
Thema durchsuchen
Ansicht
Themen-Optionen

TDataSet.Locate funktioniert nicht bei ....

Ein Thema von little-x · begonnen am 27. Feb 2009 · letzter Beitrag vom 27. Feb 2009
 
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#1

TDataSet.Locate funktioniert nicht bei ....

  Alt 27. Feb 2009, 12:05
Datenbank: Informix • Version: 7-10 • Zugriff über: Nativer Treiber + BDE (noch)
Hallo!

"Locate" schon sehr oft erfolgreich benutzt. Hauptsächlich bei besonders großen Tabellen, für Sachen wie

Delphi-Quellcode:
If Tabelle.Locate(...) then
begin
        Tabelle.Edit;
        Tabelle.FieldByName('').AsIrgendwas:= IrgendWas;
        //....
        Tabelle.Post;
end else
begin
        Tabelle.Insert;
        Tabelle.FieldByName('').AsIrgendwas:= IrgendWas;
        //....
        Tabelle.Post;
end;
Gestern bin ich ein bisschen auf den Kopf gefallen. Die Locate-Methode scheint nur solange zu funktionieren, wie in Suchfeldern kein Float (Double etc)-Wert zu finden ist.

Im aktuellen Fall ist es ein (Informix)-Datenbankfeld
DECIMAL(16,4) Ich suche mit insgesamt 4 Feldern nach dem Datensatz (die sind auch der Index, aber das spielt eigentlich keine Rolle beim Locate).
Delphi-Quellcode:
var Lokalksiert: Boolean;
Lokalisiert:= Tabelle.Locate('feld1;feld2;feld3;feld4'; [Ein_entsprechendes_VariantArray], []);
// FELD3 ist besagtes Feld!!!
// So findet er ihn nicht!!!

// Lasse ich Feld 3 weg, findet er ihn.
Lokalisiert:= Tabelle.Locate('feld1;feld2;feld4'; [Ein_entsprechendes_VariantArray_ohne_feld3], []);
// erfolgreich.
Habe ALLES durchprobiert, auch indem ich das VarArray manuell belege:
Delphi-Quellcode:
// Der Wert des gesuchten Feldes ist 1,43
Lokalisiert:= Tabelle.Locate('feld1;feld2;feld3;feld4'; VarArrayOf(['12', 'testwert2', '1.43', 'testwert4' ]), []);
// auch Punkt durch Komma ersetzt (wobei das bei der Umwandlung von Double nach Variant ohnehin egal ist)
Lokalisiert:= Tabelle.Locate('feld1;feld2;feld3;feld4'; VarArrayOf(['12', 'testwert2', '1,43', 'testwert4' ]), []);
// auch alle Nachkommastellen ausgefüllt
Lokalisiert:= Tabelle.Locate('feld1;feld2;feld3;feld4'; VarArrayOf(['12', 'testwert2', '1,4300', 'testwert4' ]), []);
Lokalisiert:= Tabelle.Locate('feld1;feld2;feld3;feld4'; VarArrayOf(['12', 'testwert2', '1.4300', 'testwert4' ]), []);

// Was aber funktioniert, ist das Finden des Datensatzes mit "Filter"
Tabelle.Filter:= 'feld1 = 12 AND feld2 = ''testwert2'' AND feld3 = 1,43 and Feld4 = ''testwert4''';
Tabelle.Filtered:= True;
Lokalisiert:= (not Tabelle.Eof);
// erfolgreich!
Weiß eine(r) was ich beim Locate falsch mache?
Ich tippe auf einen Bug.
manchmal machts mich mürbe
  Mit Zitat antworten Zitat
 


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 07:28 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