[gelöst] RecId in gefilterter Datenmenge

11. Februar 2015 09:50

Hallo,

ich möchte wissen ob eine RecId in einer gefilterten Datenmenge vorhanden ist.
Jetzt mache ich das über ein Schleife


Code:
    REPEAT
       RecIdInterface := InterfaceRef.RECORDID;
       IF FORMAT( RecIdInterface ) = FORMAT( RecId ) THEN
       BEGIN
         Result := TRUE;
         InterfaceRef.FINDLAST;
       END;
    UNTIL InterfaceRef.NEXT = 0;



Ist natürlich performancelastig da immer alle Datensätze durchgerannt wird.

Hat jemand eine bessere Idee ?


lg
Jörg

Re: RecId in gefilterter Datenmenge

11. Februar 2015 10:02

Es ist schonmal korrekt, dass auf RecordIDs selbst nicht gefiltert werden kann.

Deine Tabelle InterfaceRef SPEICHERT nicht den zu suchenden Datensatz, sondern IST der zu suchende Datensatz (RecID), korrekt?
Dann kannst du aus der zu suchenden RecordID mittels GETRECORD einen RecordRef generieren, um den wiederum auf RecordRef.GET(RecID) zu testen. Dürfte um einiges schneller sein :-)

Re: RecId in gefilterter Datenmenge

11. Februar 2015 10:03

Ich habe keine Ahnung ob es funktioniert, aber schonmal

Code:
RecRef.GET(RecordID)

versucht?

Edit: Hut ab Natalie, besser und schneller.

Re: RecId in gefilterter Datenmenge

11. Februar 2015 10:18

Natalie hat geschrieben:Dann kannst du aus der zu suchenden RecordID mittels GETRECORD einen RecordRef generieren, um den wiederum auf RecordRef.GET(RecID) zu testen. Dürfte um einiges schneller sein :-)

Korrektur: das GET würde die Filter ignorieren, den du in InterfaceRef bereits gesetzt hast. Arbeite also entweder mit FIND statt GET, oder teste beim durch GET gefundenen Datensatz, ob er zu den Filterkriterien passt.

Re: RecId in gefilterter Datenmenge

11. Februar 2015 10:18

Natalie hat geschrieben:Dann kannst du aus der zu suchenden RecordID mittels GETRECORD einen RecordRef generieren, um den wiederum auf RecordRef.GET(RecID) zu testen. Dürfte um einiges schneller sein :-)

Korrektur: das GET würde die Filter ignorieren, den du in InterfaceRef bereits gesetzt hast. Arbeite also entweder mit FIND statt GET, oder teste beim durch GET gefundenen Datensatz, ob er zu den Filterkriterien passt.

Re: RecId in gefilterter Datenmenge

11. Februar 2015 11:28

Hallo,
ich habe mich wohl unklar ausgedrückt :-(

RecId enthät die RecId eines Datensatzes ( zb: Tabelle Item, "No." Test )

Jetzt muss ich wissen ob dieser Datensatz, wenn ich die Tabelle Item zb auf "No 2." = 123, filtere diese RecId in der Ergenissmenge vorhanden ist.

Quasi müsste ich auf den Primärschlüssel der Tabelle mit den Werten aus RecId und zusätzlich auf "No 2." = 123 filter.

Wenn Find dann <> 0 ist der Datensatz drin wenn find=0 dann halt nicht.

lg

Re: RecId in gefilterter Datenmenge

11. Februar 2015 13:02

Ich habe dich genau so verstanden und dir entsprechend etwas vorgeschlagen ;-)

Re: RecId in gefilterter Datenmenge

11. Februar 2015 20:34

Dann habe ich dich nicht verstanden :-(

Werde mir das morgen noch mal ansehen ....

[gelöst] Re: RecId in gefilterter Datenmenge

13. Februar 2015 16:22

jetzt hab ichs

InterfaceRef.GET(RecId );
InterfaceRef.SETRECFILTER;

Die weiteren Filter setzten auf InterfaceRef


IF InterfaceRef.FINDFIRST THEN
BEGIN
RecIdInterface := InterfaceRef.RECORDID;
IF FORMAT( RecIdInterface ) = FORMAT( RecId ) THEN
EXIT( TRUE )
END;
EXIT( FALSE );