Filtern nach Datensatznummern?

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Filtern nach Datensatznummern?

Beitrag von Martin Altmann »

Hallo allerseits,
hat einer von Euch einen guten Vorschlag für mich?
In meiner Datenbank gibt es zwei "Felder", die nicht änderbar sind - ENR und recno().
In einem speziellen Fenster gebe ich den Nutzern die Möglichkeit, sich alle Datensätze anzeigen zu lassen, bei denen z.B. der Nachname des Besitzers mit Al anfängt (das Al ist natürlich frei eingebbar).
Anschließend wird ein entsprechender Filter gesetzt und die Datensätze können durchlaufen und editiert werden.
Wenn nun natürlich das entsprechende Feld, auf dem der Filter sitzt, geändert wird, fliegt der Datensatz aus dem "scope" und scheint verschwunden.
Dies sorgt halt für Verwirrung.
Ich überlege jetzt, erst einen Filter wie bisher zu setzen, mir die recno()s der betreffenden Datensätze zu merken und dann den Filter auf die recno()s zu ändern. Ich denke mal, dass das mit

Code: Alles auswählen

set filter to ( ASCAN( array_mit_gemerkten_datensaetzen, recno() ) > 0 )
zu erschlagen geht, aber gibt es vielleicht eine schnellere und bessere Möglichkeit?
Set Scope wird sicherlich nicht gehen - die betreffenden Datensätze sind natürlich nicht aufeinanderfolgend! Extra Indexdateien nur dafür zu erzeugen habe ich keine Lust!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Hallo Martin,
ich arbeite wenn möglich überhaupt nicht mit Filtern. Wenn du die Datensätze schon ermittelst, kannst du doch auch gleich ein Array browsen, dir darin merken welche Sätze geändert wurden und abschließend alle geänderten Datensätze des Arrays in der Datenbank ändern. Das Einlesen von Datensätzen in ein Array geht doch sehr schnell.
Viele Grüße
Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Wolfgang,
vielen Dank für Deinen Vorschlag - die Idee an sich ist nicht schlecht (zumal ich auch bei vielen Reports gerne und exzessiv mit Arrays arbeite).
Nur würde ich dann im Prinzip den bereits fertigen Programmpunkt komplett umschreiben müssen -> zu aufwändig (bzw. ich zu faul ;-) )

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo,
nur zur Info (wen es interessieren sollte): Habe es jetzt einfach mal so gemacht, wie ich es oben geschrieben hatte (Filter auf die betreffenden Datensätze). Funktioniert und geht ratzfatz :-)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

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

Beitrag von brandelh »

Hallo Martin,

im Prinzip machst du nichts anderes, als das was vorgeschlagen war,(Recno() in Array sichern und nur diese anzeigen - mach ich auch in manchen Fällen) aber dann den Filter auf ein ASCAN(...) das ist genial !

Es ist so einfach wie ein normaler Filter und so schnell wie die reinste Arraysteuerung. :idea: Da habe ich wieder was gelernt.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
jein - Wolfgang meinte ja, alle betreffenden Datensätze in ein Array lesen (komplett, nicht nur die Nummern!) und diese dann editieren lassen und anschließend zurückschreiben.
Ich suche mir vorher alle Datensätze, die den Suchkriterien entsprechen, mekre mir die betreffenden Datensatznummern in einem Array und setze darauf den Filter :arrow: das Ändern erfolgt nach wie vor direkt auf den betreffenden Datensätzen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

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

Beitrag von brandelh »

Das war mir schon klar, mit 'im Prizip das gleiche' meinte ich die Verlagerung der Suche von Satz zu Satz (normaler Filter bei jedem Skip) auf 'einmal Suchen, Satze merken' (egal ob nur Recno() - wie ich es auch mache; oder den ganzen Satz) und somit einen enormen Performance Gewinn beim browsen.

Genial ist die Verbindung dieses Arrays mit dem set filter to ascan(), da man nun die Automatik beim skippen benutzen kann und nicht auf Handschaltung über lookups im Array zurückgreifen muß.
Dafür wollte ich Anerkennung zollen ...
Gruß
Hubert
Antworten