Scope und Seek [Erledigt]

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

Moderator: Moderatoren

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

Scope und Seek [Erledigt]

Beitrag von Jan »

Ich bin gerade auf ein irritierendes Phänomen gestoßen: Ich setze auf einer dbf mit Index1 ein Scope. Wenn ich danach ein alias->(DbSeek(suchbegriff, , "index2")) mache mit einem suchbegriff, der eindeutig nicht im Scope-Bereich zu finden ist, dann findet der den doch. Frage ich den gefundenen RecNo() ab, zeigt der mir einen an, der eindeutig nicht im Scopebereich liegt.

Was ich mache:
alias->(OrdSetFocus(index1))
alias->(DbSetScope(SCOPE_BOTH, auftragsnummer))
alias->(DbSeek(suchbegriff, , "index2")) // Suchbegriff ist in keinem Satz im Scope-Bereich vorhanden

So wie ich Scopes verstehe ist das doch so, das ich suchen kann was ich will, solange ich den führenden Index (auf dem der Scope liegt) nicht ändere, darf keine Suchbedingung einen Satz außerhalb finden. Oder sehe ich das falsch?

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: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Scope und Seek

Beitrag von Tom »

solange ich den führenden Index (auf dem der Scope liegt) nicht ändere
Aber genau das machst Du doch im DbSeek()! Der dritte Parameter bestimmt, dass in "index2" gesucht wird, und für diesen Index gibt es keinen Scope.
Herzlich,
Tom
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: Scope und Seek

Beitrag von UliTs »

Hallo Jan,

leider siehst Du das falsch :-( . Ich bin über das gleiche Problem gestolpert. Wenn ein Scope über einen Index eingesetzt wird, kann man nicht über einen anderen Index suchen ohne das der Scope aufgehoben wird.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Scope und Seek

Beitrag von Manfred »

Deswegen mache ich an solchen Stellen die DBF immer noch ein weiteres mal auf und dann kann ich damit machen was ich will.

PS. Geht das überhaupt so, wie Jan es vorhat? Er macht in ein und dem selben Alias eine Scope und will ihn dann zerbrechen, in dem er auf einem anderen Index sucht. Da wird doch der Satzzeiger verändert, oder nicht?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Scope und Seek

Beitrag von Jan »

Hmm. Jetzt irritiert Ihr mich aber. Ich war immer der festen Überzeugung, das ich mit dem dritten Parameter in DbSeek() den führenden Index eben nicht ändere. Und daher im eingegrenzten Scope-Bereich suchen kann.

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: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Scope und Seek

Beitrag von Tom »

SET SCOPE/DbSetScope() setzt einen Indexfilter für den jeweils führenden Index. Wenn ich DbSeek() mit dem dritten Parameter nutze, schaltet die Engine für die Suche (vorübergehend) auf diesen Index (dritter Parameter) um. Führender Index und m.E. auch Scope bleiben zwar prinzipiell aktiv, aber für den gewählten - nicht führenden, nicht gescopten - Index spielt das keine Rolle. Damit kann ich auf diese Weise auch Datensätze erreichen, die die zu diesem Zeitpunkt irrelevante und auch kaum zu prüfende Scope-Bedingung nicht erfüllen. Die Einschränkung gilt in diesem Augenblick einfach nicht. Nach dem DbSeek() müsste die Scope-Bedingung geprüft werden.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Scope und Seek

Beitrag von Jan »

OK. Wieder was dazu gekernt

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten