2016-05-03 9 views
1

EDIT: HansUp Lösung hat gut funktioniert, für jeden, der dies in der Zukunft verwenden Sie sicherstellen, dass Sie Ihre multiplen Indizes löschen, nachdem Sie sie verwenden. Auf Tischen von der Größe von mir verdoppelten sie fast die Größe der Datenbank. Eine noch bessere Idee, die ich am Ende benutzte, war das Erstellen einer temporären Datenbank, die das Workspace-Objekt verwendet und alle Verarbeitungen dort vorbereitete, wobei nur die endgültigen Daten in die eigentliche Datenbank zurückgebracht wurden.Mit .Seek, Testergebnis, dann .Suche erneut

Ich hoffe, es gibt eine Möglichkeit, dies zu tun, aber ich habe keine Möglichkeit gesehen zu steuern, wo .Seek beginnt im Index suchen (anders als mit <, um am Ende zu starten).

Ich muss 2 Tabellen vergleichen, um den Ursprungsdatensatz für eine Gehaltsanpassung zu finden. Das Problem ist, dass die Programmierer unseres SAP-Moduls bei all ihren großartigen Planungen entschieden haben, die eindeutige Datensatzkennung aus der Ausgabe der Gehaltsberechnungen zu entfernen, sodass ich den Reverse-Engineer, aus dem die Anpassung stammt, zurückgeben kann.

Ich konnte die meisten Datensätze mit .seek übereinstimmen, das Problem tritt auf, wenn das Ergebnis zurück zu einer von mehreren Aufzeichnungen verfolgt werden kann (sie waren gezwungen, Dutzende von korrektiven Pay-Läufen zu machen, um Fehler in ihrem ursprünglichen Code zu beheben)).

Was ich hoffe zu tun ist, verwenden Sie eine .seek, testen Sie eine Anpassungsvariable (hat die Datensätze Pay auf 0 bereits angepasst worden) und wenn ja, .seek wieder auf den nächsten passenden Datensatz im Index.

Gibt es eine Möglichkeit zu diktieren, wo die .seek beginnt Indexeinträge zu vergleichen? Kann meine nachfolgende Suche nach dem aktuellen Spiel beginnen?

Ich bin mir bewusst, ich könnte eine .FindNext nach der ursprünglichen .seek verwenden, aber ich hatte gehofft, die .find Gruppe von Methoden aufgrund ihrer langsameren Natur zu vermeiden.

Irgendwelche Ideen?

Antwort

2

Recordset.Seek findet den ersten Datensatz, der dem gesuchten Wert entspricht (falls vorhanden) und erstellt den aktuellen Datensatz.

Es gibt keine Möglichkeit, es an Seek den zweiten Datensatz zu teilen, der mit ... oder einem anderen Datensatz als dem ersten übereinstimmenden Datensatz übereinstimmt.

Da jedoch Ihre Recordset durch den Steuerindex bestellt wird (die Seek in erster Linie der Verwendung erforderlich ist), verwenden Recordset.MoveNext zum nächsten Datensatz zu bewegen und überprüfen, ob das indizierte Feld Rekords noch Ihren Seek Wert übereinstimmt.

Sie können MoveNext wiederholen und das indizierte Feld überprüfen, bis der Wert dieses Felds nicht mehr mit Ihrem Seek Wert übereinstimmt. An diesem Punkt wissen Sie, dass Sie alle übereinstimmenden Datensätze überprüft haben.

Wenn Sie basierend auf < oder <= einen Wert suchen, was bedeutet Seek beginnt am Ende des Indexes, es ist fast genau das gleiche Geschäft. Verwenden Sie einfach MovePrevious statt MoveNext

+1

Vielen Dank für die große Antwort Hans, löste Ihre Lösung mein Problem, wie immer, meine Strategie nur ein paar neue erstellt. – pegicity

Verwandte Themen