Frage

Mit TDataSet.FindKey Sie Datensätze suchen können. Wenn es in tatsächlichen Ergebnisse werden die Datensätze Cursor auf den gefundenen Datensatz positioniert werden. Wenn es in der False ergibt, wird der Cursor nicht bewegt. Dies führt zu den Aufzeichnungsdatum vor FindKey wurden in datensensitiven Komponenten angezeigt ausgegeben werden.

Wie kann ich das Ergebnis von FindKey Code einen leeren Datensatz zurück?

    if Not tblSomeTable.FindKey([SomeSearchData]) then
    begin
        < code to return empty or move data cursor to neutral position >
    end;

Update: (Wartete ein paar Tage vor der Auswahl des richtigen Antwort, wie ich glaube, dass der Brauch ist, und hat wan nicht weiter Feedback zu entmutigen.) Es gab mehrere Vorschläge zur Bewältigung dieser Situation obwohl ich glaube, die richtige Antwort war von Marcelo, dass es nicht möglich ist, einen Cursor nicht auf einem Datensatz zu haben. Mehrere Abhilfen wurden vorgeschlagen. Ich entschied mich für einen meiner eigenen. Es ging so etwas wie:

    If Not tblSomeTable.FindKey([SomeSearchData]) then
    begin
        tblSomeTable.FindKey([-1,2010]);
    end

Was ich getan habe ist eine Attrappe, leeren Datensatz mit einem Index erstellen, dass die tatsächlichen Daten können nie sein, das heißt: Der erste Indexwert wird nie -1. Wenn die anfängliche Suche leer kommt dann die FindKey die Cursor auf diesem leeren Datensatz positionieren. Dadurch wird die visuelle Wirkung liefere ich war nach.

War es hilfreich?

Lösung

Dies ist nicht möglich, soweit ich weiß. Der Cursor muss immer auf einen Datensatz sein, wenn BOF und EOF beide wahr sind (leere Datensatz).

Andere Tipps

TDataSet hat bisher keine "neutrale Position". Aber wie immer haben Sie einige Optionen:

  1. Set-Datensatz in Insert / append Aufnahmemodus. So werden die Kontrollen und Code leeren Datensatz sehen. Seien Sie vorsichtig, als etwas, kann übrigens assign Daten auf ein Feld und dann wird der neue Datensatz DB geschrieben werden.
  2. Abhängig von den Datenzugriffskomponenten, die Sie verwenden, können Sie Datensatz Cached Updates Modus, Einsatz gesetzt und nach neuen, leeren Datensatz in Datensatz und alle Änderungen markieren, wie angewendet. Dann weist einen Filter, um diesen normalerweise leeren Datensatz zurückgewiesen. Dann in Ihrem Code haben Sie die Filter über wechseln, so wird es alle Datensätze ablehnen, ohne diese leeren.
  3. Sie sich das TDataSource aus dem Datensatz zu trennen und es später wieder an.

Hinweis sicher, aber wahrscheinlich gibt es einige andere Ansätze erfunden werden können:)

Hallo,

Verwendung SetRange statt FindKey.

tblSomeTable.SetRange([SomeSearchData],[SomeSearchData]);
try
  while not tblSomeTable.Eof do begin
    <do something with the Record>
    tblSomeTable.Next;
  end;
finally
  tblSomeTable.CanelRange;
end;

, wenn Sie Kriterien sichergestellt, dass die maximal passende Datensätze ist, die Sie mit der Aussage über Null oder einen Datensatz abgerufen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top