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 ..