Filter auf Child-dbf

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Filter auf Child-dbf

Beitrag von Jan »

Hallo,

ich habe zwei dbf, die per Set Relation To verknüpft sind. Auf die Child-dbf setze ich noch einen Filter. Im DbEdit() sollen also nur die Parent-Sätze angezeigt werden, die in der Child-dbf nicht ausgefiltert sind.

Resultat: Es werden garkeine Sätze mehr angezeigt.

Wo ist da mein Denkfehler?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von Tom »

Klingt ein bisschen verwirrend. Du wendest einen Filter auf die Child-DBF an, willst aber im Ergebnis nur Datensätze aus der Parent-DBF sehen, die nicht in der Child-DBF gefiltert sind?

Man kann Filter und Relationen kombinieren. Interessant könnte möglicherweise aber auch die SELECT-Klausel von SET RELATION sein.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Filter auf Child-dbf

Beitrag von georg »

Hallo, Jan -


eine Möglichkeit wäre, dass alle Sätze aus der Parent-DBF eine Entsprechung in der Child-DBF haben, dann wäre das Verhalten korrekt.

Es kann aber auch am SET RELATION oder dem Filter liegen. Lässt Du uns neugierige Bande mal in Deinen Code reinschauen?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von Jan »

Hallo Tom,

da stellen sich mir zwei Fragen zu:

1) Du schreibst, das man es so machen könne wie ich es mache. Aber warum klappt das dann nciht bei mir?

2) Select(ive) wäre natürlich auch ein netter Weg. Hab ich nur ncoh nie benutzt. Die Onlinehilfe gibt über die Verwendung auch nicht viel her, in DbSetRelation() wird der sogar nur noch als logischer Parameter genutzt. Aber wenn ich den in Set Realtion To einsetze gibt der mir immer einen Kompilierfehler. Hast Du da mal ein beispiel für, wie ich den einsetzen muß?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von Jan »

Georg,

nein, es gibt in der Child-dbf nur eine kleine Anzahl von Sätzen, die im Filter hängen bleiben müssten. Aber es gibt welche.

Code? Hier hast Du was, aber ob das hilft?

Code: Alles auswählen

DbSelectArea("wagrups")
wagrups->(OrdSetFocus("wagrwagr"))

DbSelectArea("wala")
wala->(OrdSetFocus("walabest"))

DbSelectArea("sozu")
sozu->(OrdSetFocus("sozusobe"))

set relation TO kompbest into wala                                                                
set relation TO sozuwagr into wagrups

IF hatrechte(MEMVAR->aAktMitarbeiter, "Vertrieb") < 9                                   
   sozu->(DbSetFilter({|| wagrups->zustaendig == MEMVAR->mitanummer .OR. ; 
                          wagrups->fachleiter == MEMVAR->mitanummer}))
   wagrups->(DbGoTop())
   sozu->(DbGoTop())
ENDIF
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von Tom »

Das kann so nicht funktionieren. Du schaffst eine 1:n-Beziehung auf "wagrups", definierst aber in der Parent-DBF "sozu" einen Filter, der sich immer nur auf das aktuelle Element aus "wagrups" beziehen kann. Der Filter müsste ja automatisch die zugehörigen Datensätze in "wagrups" durchwandern, um ein Ergebnis zu liefern, aber dazu hat er keinen Anlass, weil er für "sozu" definiert ist.

Du müsstest entweder die Filterbedingung auf eine Funktion umleiten oder darin mit DbEval() arbeiten. Und, wie gesagt - es gibt auch noch die SELECT-Klausel.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von Jan »

Hallo Tom,

klar würde ich gerne die Select-Klausel benutzen, das scheint mir der logischste Weg zu sein und auch der übersichtlichste. Aber wie ich oben schon schrieb - sobald ich die einbaue gibt es einen Kompilerfehler (falsche Syntax). Und nirgends steht, wie die korrekt umgesetzt wird.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von brandelh »

Ich denke NICHT, dass die Hauptdatei gefiltert werden kann über einen Filter der CHILD DBF.

Denn die Hauptdatei steuert die Aktionen der Child-DBF. Filter dort hab ich nur so gesehen,
dass diese die CHILD auf den aktuellen Satz des Hauptdatei begrenzen.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von Tom »

Vorschlag:

Keine Relation auf die Parent-DBF, aber ein Filter, der in eine Funktion verzweigt. Dort dann via Scope oder DbSeek/DO WHILE auf "wagrups" Suche nach den jeweils dazugehörigen Datensätzen. Daraus ergibt sich dann der Rückgabewert für den Filter.
Oder das gleiche via DbEval() und Relation, aber hier könnte es Reihenfolgeprobleme geben. SET RELATION bewirkt eine Navigation in der Childdatei erst, wenn diese angefasst wird. Der Filter wird aber vorher ausgewertet, weil durch die Navigation in der Parent-DBF.
Herzlich,
Tom
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von Herbert »

Der Vorschlag von Tom hilft dir, die Relationen innerhalb deiner Tabellen besser zu verstehen...
...denn
...ich sehe z.B. dass du zuerst auf wagroups gotop machst, anschliessend auf sozu. Sozu hat aber relation in wagroups, was also in wagroups neu positioniert. Zudem machst du vor dem go top einen Filter auf ein Felder des momentanen Satzes in wagroups.
Für mich sehr verwirrend.
Grüsse Herbert
Immer in Bewegung...
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Filter auf Child-dbf

Beitrag von UliTs »

Jan, benutzt du das in Verbindung mit dem ADS?
Dann wäre eine SQL-Lösung sehr einfach. :D
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten