Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FibPlus Dataset.Locate lügt (https://www.delphipraxis.net/153616-fibplus-dataset-locate-luegt.html)

Perlsau 10. Aug 2010 10:52

Datenbank: Firebird • Version: 2.1 • Zugriff über: Delphi2009 + FibPlus

FibPlus Dataset.Locate lügt
 
Hallo Delphi-Programmierer,

mir ist heute morgen etwas Seltsames widerfahren: In meiner Datenbank-Anwendung befindet sich eine Webbrowser-Komponente. Wenn der Anwender auf den entsprechenden Button klickt, soll die aktuelle URL in der Datenbank (Firebird) gespeichert werden, falls sie noch nicht vorhanden ist.

Da die URL im Format Widestring vorliegt, habe ich das entsprende Feld in der Datenbank als BLOB (Text) definiert. Nun findet aber ein mit FibDataset ausgeführtes Locate einen Datensatz, der gar nicht existiert, denn in der Tabelle "URLS" ist bislang nur eine von Hand eingetragene URL, die nicht mit der aktuell zu speichernden übereinstimmt:

INDEXURLS als BIGINT
URL_WEB als BLOB (Subtpye=Text)


Delphi-Quellcode:
{******************************************************************************************************************
 *** WEBBROWSER - BUTTON BOOKMARK SPEICHERN WURDE ANGEKLICKT                                                   ***
 ******************************************************************************************************************}
procedure TFormMain.Bit_WebBookmarkClick(Sender: TObject);
VAR
   Index : LONGINT;
   Name,
   WebURL : Widestring;
   Fund  : BOOLEAN;

PROCEDURE GetIndexURL;
BEGIN
     Index := DatMod.FIBset_URLs.FieldByName('INDEXURLS').AsInteger;
END;

begin
     WebURL := WebPDF.LocationURL;
     Name  := WebPDF.LocationName;

     Fund  := DatMod.FIBset_URLs.Locate('URL_WEB', WebURL, []);

     IF NOT Fund THEN
     BEGIN
          DatMod.FIBset_URLs.Append;
          DatMod.FIBset_URLs.FieldByName('URL_WEB').AsWideString := WebURL;
          DatMod.FIBset_URLs.Post;
          GetIndexURL;
     END ELSE
     BEGIN
          GetIndexURL;
          IF NOT DatMod.FIBset_BM.Locate('BM_URL',Index,[]) THEN
          BEGIN
               DatMod.FIBset_BM.Append;
               DatMod.FIBset_BM.FieldByName('BM_DATUM').AsDateTime := Now;
               DatMod.FIBset_BM.FieldByName('BM_USER').AsInteger   := UserNr;
               DatMod.FIBset_BM.FieldByName('BM_TEXT').AsWideString := Name;
               DatMod.FIBset_BM.FieldByName('BM_URL').AsInteger    := Index;
               DatMod.FIBset_BM.Post;
          END ELSE ShowMessage('Die aktuelle URL ist bereits eingetragen.');
     END;
end;
Ich verstehe nicht, weshalb die Variable FUND auf TRUE gesetzt wird, obwohl der gesuchte Eintrag gar nicht vorhanden ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 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-2025 by Thomas Breitkreuz