SET SCOPE mit dem ADS
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 123
- Registriert: Mo, 18. Aug 2008 9:33
- Wohnort: Kärnten / Österreich
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 2 Mal
- Kontaktdaten:
-
- 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: SET SCOPE mit dem ADS
Ich wüsste nicht, was dagegen spricht!
Funktioniert es bei Dir nicht? Zeig dann mal ein Codebeispiel.
Uli
Funktioniert es bei Dir nicht? Zeig dann mal ein Codebeispiel.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Rekursionen-Architekt
- Beiträge: 123
- Registriert: Mo, 18. Aug 2008 9:33
- Wohnort: Kärnten / Österreich
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 2 Mal
- Kontaktdaten:
Re: SET SCOPE mit dem ADS
Danke für die rasche Antwort. Ich hab grad keinen ADS am Laufen und daher einfach mal nachgefragt, weil ja einige Sachen von der ADSDBE nicht unterstützt werden. Muss ohnehin mal die neue Version 11 testen, sobald es die Zeit zulässt.
lg
CRT
lg
CRT
- Tom
- 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: SET SCOPE mit dem ADS
Hallo, CRT.
Zu beachten ist auch, dass die ADS Filterausdrücke lokal auswertet, wenn man darin UDFs verwendet. SET FILTER TO HatGeburtstag(db->geb_dat,Date()) kann nicht vom ADS aufgelöst werden. Das spielt aber im Normal-/Migrationsfall keine Rolle, weil es ja trotzdem funktioniert. Derlei gehört dann später zum Finetuning, wenn die ADS-Unterstützung läuft.
Die ADSDBE unterstützt alles, was DBF/FOX usw. auch können. Es gibt zwei halbwegs relevante Einschränkungen: 1. Je Tabelle darf es maximal 15 Indexdateien geben (im Normalfall gibt es längst nicht so viele) und 2. in den Indexausdrücken dürfen keine UDFs verwendet werden, weil die ADS diese nicht auflösen kann. Außerdem gibt es geringfügige Einschränkungen im Hinblick auf sonstige Xbase-Funktionen, die in Indexausdrücken verwendet werden können, aber die üblichen Funktionen von DtoC() über AllTrim() und PadR() bis Str() werden unterstützt.weil ja einige Sachen von der ADSDBE nicht unterstützt werden
Zu beachten ist auch, dass die ADS Filterausdrücke lokal auswertet, wenn man darin UDFs verwendet. SET FILTER TO HatGeburtstag(db->geb_dat,Date()) kann nicht vom ADS aufgelöst werden. Das spielt aber im Normal-/Migrationsfall keine Rolle, weil es ja trotzdem funktioniert. Derlei gehört dann später zum Finetuning, wenn die ADS-Unterstützung läuft.
Herzlich,
Tom
Tom
-
- 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: SET SCOPE mit dem ADS
Ich setze oft solche Filter wieTom hat geschrieben:...
Zu beachten ist auch, dass die ADS Filterausdrücke lokal auswertet, wenn man darin UDFs verwendet. SET FILTER TO HatGeburtstag(db->geb_dat,Date()) kann nicht vom ADS aufgelöst werden. Das spielt aber im Normal-/Migrationsfall keine Rolle, weil es ja trotzdem funktioniert. Derlei gehört dann später zum Finetuning, wenn die ADS-Unterstützung läuft.
Code: Alles auswählen
DbSetFilter( {||FIELD->ATId=nATId}
Das kann der ADS (natürlich) auch nicht auflösen und der Filter muss deshalb lokal berechnet werden (VIEL zu langsam).
Ich habe das wie folgt gelöst:
Code: Alles auswählen
UTsDbSetFilter( "ATId="+AllTrim(Str(nATId)) )
FUNCTION UTsDbSetFilter( cFilter ) // Im Gegensatz zu DbSetFilter() wird Filterbedingung nur als String
LOCAL cOldFilter:=DbFilter() // übergeben, "" akzeptiert und der alte Filter zurückgegeben.
LOCAL cbFilter,bFilter
IF valType(cFilter)=="C"
IF empty( cFilter )
DbClearFilter()
ELSE
cbFilter := "{||"+cFilter+"}"
bFilter := &cbFilter
DbSetFilter( bFilter,cFilter )
ENDIF
ENDIF
RETURN( cOldFilter )
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Rekursionen-Architekt
- Beiträge: 123
- Registriert: Mo, 18. Aug 2008 9:33
- Wohnort: Kärnten / Österreich
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 2 Mal
- Kontaktdaten:
Re: SET SCOPE mit dem ADS
Hallo Uli,
ich habe das so gelöst um den Filter EIN-/AUS zu schalten:
lg
CRT
ich habe das so gelöst um den Filter EIN-/AUS zu schalten:
Code: Alles auswählen
cDbFilter:= iif(lFilter, "MsgP =="+str((select())->MsgP,6,0), "") // SO N!CHT (Filter) --> := "NIL"
SET FILTER TO &cDbFilter
CRT
-
- 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: SET SCOPE mit dem ADS
Ja, genau so. Und jetzt noch in eine schöne Funktion mit der Möglichkeit, den alten Filter wieder herzustellen, verpacken .
Uli
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück