Index mit boolean [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Index mit boolean [erledigt]

Beitrag von peternmb »

Hallo irgendwie stehe ich auf dem Schlauch,

ich möchte einen Index auf Name und ein Boolean-Feld erstellen - ging das nicht irgendwie???

Beispieldatenbank:
Name Z 30
Mitglied L 1

Index on name + mitglied to xy
Zuletzt geändert von peternmb am Mo, 26. Jan 2015 13:17, insgesamt 1-mal geändert.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit boolean

Beitrag von brandelh »

Hi,

wenn man mehrere Felder in einem Index kobinieren will, muss man einen String bilden, der IMMER GLEICH LANG IST !

Code: Alles auswählen

INDEX ON field->NAME + iif(field->Mitglied,"J","N") TO xyz
das wäre ein gültiger Ausdruck, der deinem Beispiel entspricht, ich frage mich allerdings, ob er sinnvoll ist !
Sortiert wird hier nach dem Namen, und nur wenn dieser gleich ist zusätzlich nach der Eigenschaft Mitglied.

Code: Alles auswählen

INDEX ON iif(field->Mitglied,"J","N") + field->NAME TO xyz
so könnte man schnell nach Mitgliedern und Nichtmitgliedern (warum nimmt man solche in der Datenbank auf ?) sortieren ;-)
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Index mit boolean

Beitrag von peternmb »

ja Danke, genau das habe ich gesucht :blob8:

Das mit dem Mitglied war nur ein Beispiel, das natürlich nur Sinn machen würde wenn zuerst nach dem Feld Mitglied, dann nach dem Namen sortiert werden würde, so dass erst die Mitglieder alphabetisch, dann die Nichtmitglieder alphabetisch kämen...
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: Index mit boolean

Beitrag von Tom »

Womit Du über diesen Index (IF(mitglied,"J","N")+NAME) allerdings nicht mehr direkt nach Mitgliedsnamen suchen könntest. Es wäre ein zusätzlicher Index erforderlich - oder OrdWildSeek().
Herzlich,
Tom
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Index mit boolean

Beitrag von peternmb »

Hallo,

ja, das ist mir klar.
Es geht auch nicht um die Suche sondern nur um die Reihenfolge bei einer Reportausgabe.
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: Index mit boolean

Beitrag von Tom »

Es geht auch nicht um die Suche sondern nur um die Reihenfolge bei einer Reportausgabe.
Da kann man sehr leicht fast jede denkbare Sortierung ermöglichen, indem man die Daten in ein Array einliest, als Browse anzeigt und dort verschiedene Kritierien über ASort() anbietet.

Code: Alles auswählen

* Mitglied .T./.F. in Spalte 1, Name in Spalte 2:
aSort(aMitglieder,,,{|aY1,aY2|JaNein(aY1[1])+aY1[2] > JaNein(aY2[1])+aY2[2]})
* drucken

FUNCTION JaNein(lVal)
RETURN IF(lVal,"J","N")
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit boolean

Beitrag von brandelh »

Unter Clipper habe ich auch wegen der Suche und Anzeigesortierung Indexdateien angelegt, aber da unter Xbase++ praktisch keine relevante Größenbegrenzung gegeben ist,
ist es viel einfacher die Ergebnisse wie TOM schreibt in Arrays zwischen zu lagern und je nach Bedarf zu sortieren. So kann man auch aus einer Abfrage heraus die Anzahl der Treffer / Seiten ermitteln und ab einer gewissen Anzahl eine Warnung ausgeben "Achtung, 200 Seiten gefunden, sollen die wirklich gedruckt werden ? " ;-)

PS: Wenn man die Sortierung mit SetOrder(0) ausschaltet und die Datei z.B. auch mit Filter komplett nach komplexen Suchkriterien durchsucht, geht das auf aktueller Hardware wegen dem CACHE der Platten recht schnell, dann das Ergebnis in ein Array und alles sortieren. Das kann deutlich schneller sein als die Einzelsatzsuche, wenn der führende Index nicht gleich viele Sätz ausschließen kann.
Auf jeden Fall belasten zusätzliche Indexdateien insbesonder im konkurierenden Netzwerkbetrieb schon enorm, da diese ja immer mitgepflegt werden müssen.
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Index mit boolean

Beitrag von peternmb »

Vielen Dank für die Hinweise.

Ja, ich arbeite auch lieber mit Arrays - ich habe aber Probleme, Arrays an FRAX zu übergeben.
Das geht über eine kleine temporäre Datenbank (zumindest für mich) einfacher und für mich schneller.

Da es nur einige hundert Datensätze sind spielt das auch keine allzugroße Rolle.
Zuletzt geändert von peternmb am Sa, 24. Jan 2015 10:53, insgesamt 1-mal geändert.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit boolean

Beitrag von brandelh »

Das Ergebnisarray kann man sehr leicht und schnell in der richtigen Sortierung erstellen - speziell für Frax, wenn man mit den Dateinamen nicht durcheinander kommt ;-)
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: Index mit boolean

Beitrag von Tom »

Notfalls kannst Du das sortierte Array ja auch wieder in einer temporären Tabelle ablegen, die, wenn sie keinen Index besitzt, die Sortierung des Arrays hätte. Und nach dem Drucken wird sie eben gelöscht.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Index mit boolean

Beitrag von brandelh »

BRANDELH hat geschrieben:Das Ergebnisarray kann man sehr leicht und schnell in der richtigen Sortierung erstellen - speziell für Frax, wenn man mit den Dateinamen nicht durcheinander kommt ;-)
Tom hat geschrieben:Notfalls kannst Du das sortierte Array ja auch wieder in einer temporären Tabelle ablegen, die, wenn sie keinen Index besitzt, die Sortierung des Arrays hätte. Und nach dem Drucken wird sie eben gelöscht.
Eigentlich wollte ich genau das schreiben ... aber irgendwie ist die Hauptsache bei meiner Beschreibung unter gegangen, nämlich dass aus dem Array eine passende DBF werden soll.
Ich mach wohl besser Feierabend für heute ... :roll:
Gruß
Hubert
Antworten