Thema: Delphi Locate findet nix

Einzelnen Beitrag anzeigen

wurzelsepp1

Registriert seit: 9. Dez 2012
90 Beiträge
 
Delphi 3 Professional
 
#23

AW: Locate findet nix

  Alt 24. Mär 2019, 22:29
Zuvor wird lediglich der Tabellenname und die Datenbankverbindung übergeben.
Das will ich aber auch sehen!
Delphi-Quellcode:
try
  IBTable.Close;
  IBTable.TableName := 'IP2GEOID';
  IBTable.Open;
  if IBTable.Locate('ip_idx', '1.0.72', [loPartialKey]) then begin
    ShowMessage(Format('gefunden wurde: %s',[IBTable.FieldByName('ip_idx').AsString]));
  end else begin
    ShowMessage(Format('nicht gefunden, RecNo = %d, RecordCount = %d, aktuelle IP = %s',
                       [IBTable.RecNo, IBTable.RecordCount, IBTable.FieldByName('ip_idx').AsString]));
  end;
except
  on e : Exception MessageDlg(e.Message,mtError,[mbOk],0);
end;
Geht das? Kommt dabei irgendwas raus? Und wenn ja, was?

Und was liefert select * from IP2GEOID where IP_IDX starting with '1.0.72' ?


Hast Du die IBTable mal mit 'ner TDataSource verbunden und die mit 'nem TDBGrid, um zu sehen, was zur Laufzeit des Programmes da so in der Tabelle enthalten ist? Kann, auch wenn's für das Programm letztlich nicht erforderlich ist, beim Test schonmal recht hilfreich sein.
Also, das Codebeispiel liefert natürlich den Nicht-gefunden-Dialog und der Zeigt auf den ersten Datensatz der Tabelle. Sollte der auf den letzten zeigen?

Das SQL-Query in deinem Beispiel liefert nichts. Bei den SQL-Abfragen kriege ich nur Daten wenn ich keine Klausel angebe oder aber einen Platzhalter vorn und hinten, also "like '%1.2.3%'"

Noch ein Nachtrag:
Ich habe die Idee mit dem DBGrid mal eingebaut. Die Tabelle, in der Loacate suchen soll, wird nicht bewegt. Daher auch die Anzeige in den Dialogfeld für Recno. Unklar ist mir, warum Recordcount einen Phantasiewert anzeigt. Wenn ich durch das dbgrid scrolle, nimmt dieser Wert auch mal einen Wert um die 100 an. Die Anzahl der Datensätze liegt aber bei 4 Mio ..

Geändert von wurzelsepp1 (24. Mär 2019 um 22:51 Uhr)
  Mit Zitat antworten Zitat