Index
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Index
Gibt es eigentlich einen Weg, einen Index auf 2 Felder einer dbf zu legen? Nicht auf Feld1+Feld2, sondern beide Felder in die Sortierung eingereiht.
Soweit ich weiß geht das nicht. Wie kann mann das dann intelligent lösen? Klar, ich kann einen Filter darauf setzen. Ist bei zu vielen Datensätzen aber performacemäßig nicht sonderlich clever. Ich möchte das lieber über Scopes machen. Aber da kann man auch nur einen gleichzeitig je dbf setzen.
Falls das eine Rolle spielt: Ich arbeite mit cdx.
Jan
Soweit ich weiß geht das nicht. Wie kann mann das dann intelligent lösen? Klar, ich kann einen Filter darauf setzen. Ist bei zu vielen Datensätzen aber performacemäßig nicht sonderlich clever. Ich möchte das lieber über Scopes machen. Aber da kann man auch nur einen gleichzeitig je dbf setzen.
Falls das eine Rolle spielt: Ich arbeite mit cdx.
Jan
Zuletzt geändert von Jan am Sa, 17. Okt 2009 8:04, insgesamt 2-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
Häää? Was Du wollen?
Du meinen, Du haben zwei an sich gleiche Felder (von der Semantik her) in einem Datensatz, aber mit unterschiedlichem Inhalt?
Also z.B. Telefonnr1 Telefonnr2?
Und Du willst einen Index, der nach allen Telefonnummern geht - egal ob sie in dem Feld Telefonnr1 oder Telefonnr2 steht?
Und in diesem Index würde dann der jeweilige Datensatz zweimal auftauchen - einmal mit der einen und einmal mit der anderen Nummer?
So in etwa?
Viele Grüße,
Martin
Du meinen, Du haben zwei an sich gleiche Felder (von der Semantik her) in einem Datensatz, aber mit unterschiedlichem Inhalt?
Also z.B. Telefonnr1 Telefonnr2?
Und Du willst einen Index, der nach allen Telefonnummern geht - egal ob sie in dem Feld Telefonnr1 oder Telefonnr2 steht?
Und in diesem Index würde dann der jeweilige Datensatz zweimal auftauchen - einmal mit der einen und einmal mit der anderen Nummer?
So in etwa?
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Was soll denn die blöde Eingangsfrage? Du hast doch genau verstanden, was ich will.
Tststs
Jan
Tststs
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
Nö - nicht wirklich. Nur vermutet! Aber damit lag ich ja richtig!
So was geht natürlich nicht! Behaupte ich mal
Mach zwei Indizes (einen für jedes Feld) und suche in einem. Wenn Du dort nichts findest, suchst Du im anderen.
Viele Grüße,
Martin
So was geht natürlich nicht! Behaupte ich mal
Mach zwei Indizes (einen für jedes Feld) und suche in einem. Wenn Du dort nichts findest, suchst Du im anderen.
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Martin,
Dein erstes Raten war ja richtig. Dein Tipp aber nicht. Das Problem ist, daß ich eine eine Teilmenge der Datensätze brauche. DbSetFilter() ist mir aber wesentlich zu lahm, also möchte ich ein DbSetScope() machen. Dafür brauche ich aber einen entsprechenden Index. Und man kann nur einen Scope setzen, sonst könnte ich ja zwei Indizee setzen und zwei Scopes parallel schalten. Geht aber halt nicht. Also müssen beide Felder in einen Index. Gleichrangig. Oder ganz was anderes, weiß aber nicht, was das sein könnte.
Jan
Dein erstes Raten war ja richtig. Dein Tipp aber nicht. Das Problem ist, daß ich eine eine Teilmenge der Datensätze brauche. DbSetFilter() ist mir aber wesentlich zu lahm, also möchte ich ein DbSetScope() machen. Dafür brauche ich aber einen entsprechenden Index. Und man kann nur einen Scope setzen, sonst könnte ich ja zwei Indizee setzen und zwei Scopes parallel schalten. Geht aber halt nicht. Also müssen beide Felder in einen Index. Gleichrangig. Oder ganz was anderes, weiß aber nicht, was das sein könnte.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
OK - dumme Idee:
Du hast die beiden Felder - jeweils mit Länge 20.
Dann baust Du Dir ein neues Feld mit Länge 41 - da schreibst Du beide Inhalte hintereinander rein, nur getrennt durch ein Zeichen, das in den Feldern nicht vorkommt (also bei Telefonnummern z.B. die |).
Dann setzt Du darüber einen Filter nach dem Motto:
SET FILTER TO cNummer $ DOPPELFELD
Viele Grüße,
Martin
Du hast die beiden Felder - jeweils mit Länge 20.
Dann baust Du Dir ein neues Feld mit Länge 41 - da schreibst Du beide Inhalte hintereinander rein, nur getrennt durch ein Zeichen, das in den Feldern nicht vorkommt (also bei Telefonnummern z.B. die |).
Dann setzt Du darüber einen Filter nach dem Motto:
SET FILTER TO cNummer $ DOPPELFELD
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Martin,
nee, das geht nicht. Ich brauche kein Feld wo beides drin steht. Das könnte ich auch über einen Index machen. Ich brauche beides einzeln und als getrennte Werte.
Jan
nee, das geht nicht. Ich brauche kein Feld wo beides drin steht. Das könnte ich auch über einen Index machen. Ich brauche beides einzeln und als getrennte Werte.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Jürgen,
nein, geht auch nicht. Dafür brauche ich auch einen führenden Index. Den ich ja gerne haben möchte, den aber wohl nicht geben kann.
Jan
nein, geht auch nicht. Dafür brauche ich auch einen führenden Index. Den ich ja gerne haben möchte, den aber wohl nicht geben kann.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
Hallo Jan,
Du hast doch beides einzeln - und zusätzlich zusammen, um darüber zu suchen.
Warum geht das nicht?
Bzw., warum gehen nicht zwei einzelne Indexe?
Was willst Du denn mit einer zu suchenden Nummer machen, was auf die beiden Arten nicht ginge?
Viele Grüße,
Martin
Du hast doch beides einzeln - und zusätzlich zusammen, um darüber zu suchen.
Warum geht das nicht?
Bzw., warum gehen nicht zwei einzelne Indexe?
Was willst Du denn mit einer zu suchenden Nummer machen, was auf die beiden Arten nicht ginge?
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Martin, ich brauche (um bei Deinem Beispiel zu bleiben) beide Telefonnummern untereinander. In einer sortierten Liste. Für sowas ähnliches wie einen Browse. Aber eben gefiltert, nicht die komplette Liste.
Ich brauche keine Kombination aus beiden Nummern, ich brauche die nicht parallel, ich brauche die in einer einzigen Sortierung, ohne Rang nach Feldherkunft.
Jan
Ich brauche keine Kombination aus beiden Nummern, ich brauche die nicht parallel, ich brauche die in einer einzigen Sortierung, ohne Rang nach Feldherkunft.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
Und wonach willst Du filtern???
Du suchst eine Telefonnummer - die findest Du einmal (oder mehrmals, wenn Du z.B. eine Familie erwischst oder eine kleine Firma mit nur einem Telefon).
Wozu willst Du die nach dem finden mehrmals anzeigen? Dich interessieren doch dann eigentlich nur die anderen Daten, die Nummer hattest Du ja schon...
Egal - mit meinem Vorschlag hast Du das doch erschlagen! Beide Telefonnummern einzeln bei jedem Datensatz - in dem Sammelfeld trägst Du sie ja konkateniert (mit einem Trenner dazwischen) automatisch ein. Und über dieses Sammelfeld setzt Du den Filter (mit $!!). Dabei ist es dann völlig egal, ob die gesuchte Telefonnummer im Feld1 oder im Feld2 steht.
Viele Grüße,
Martin
Du suchst eine Telefonnummer - die findest Du einmal (oder mehrmals, wenn Du z.B. eine Familie erwischst oder eine kleine Firma mit nur einem Telefon).
Wozu willst Du die nach dem finden mehrmals anzeigen? Dich interessieren doch dann eigentlich nur die anderen Daten, die Nummer hattest Du ja schon...
Egal - mit meinem Vorschlag hast Du das doch erschlagen! Beide Telefonnummern einzeln bei jedem Datensatz - in dem Sammelfeld trägst Du sie ja konkateniert (mit einem Trenner dazwischen) automatisch ein. Und über dieses Sammelfeld setzt Du den Filter (mit $!!). Dabei ist es dann völlig egal, ob die gesuchte Telefonnummer im Feld1 oder im Feld2 steht.
Viele Grüße,
Martin
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.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
Hmm - ich verstehe Dich wirklich nicht... Ich gehe erst mal duschen - Du könntest ja mal bitte in der Zwischenzeit einige Datensätze auszugsweise hier tippen und danach, was davon Du wie sehen willst wenn Du wonach suchst...
Vielleicht wird es mir dann klarer...
Viele Grüße,
Martin
Vielleicht wird es mir dann klarer...
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Martin,
nein! Kein Filter! Den habe ich, und der ist zu lahm. Den will ich loswerden!
Um bei dem Beispiel der Telefonnummern zu bleiben: In einem der beiden Felder steht die Mobilnummer, im anderen die Festnetz. Welche in welchem Feld steht kann variieren. Ich muß alle 0163nnn herausfiltern (nicht mit DbSetFilter()!). Um daraus die Namen der Besitzer herauszubekommen und in der Liste anzuzeigen. Nicht alphabetisch nach Name, sondern sortiert nach der Rufnummer (ja, wirklich).
Mir geht es wie Dir, ich bin etwas müde. Ich hoffe, daß das Beispiel passt und Dir das verständlich machen kann.
Jan
nein! Kein Filter! Den habe ich, und der ist zu lahm. Den will ich loswerden!
Um bei dem Beispiel der Telefonnummern zu bleiben: In einem der beiden Felder steht die Mobilnummer, im anderen die Festnetz. Welche in welchem Feld steht kann variieren. Ich muß alle 0163nnn herausfiltern (nicht mit DbSetFilter()!). Um daraus die Namen der Besitzer herauszubekommen und in der Liste anzuzeigen. Nicht alphabetisch nach Name, sondern sortiert nach der Rufnummer (ja, wirklich).
Mir geht es wie Dir, ich bin etwas müde. Ich hoffe, daß das Beispiel passt und Dir das verständlich machen kann.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
Hallo Jan,
passt - Danke!
Und Dein Filter im Moment ist wahrscheinlich ( .... == Feld1 ) .or. ( .... == Feld2 ) - oder?
Wenn ja, versuche das mal mit dem gemeinsam Hilfsfeld und dem $ - das geht eigentlich recht schnell...
Über wie viele Datensätze reden wir eigentlich?
Oder noch besser und viel einfacher:
Du baust Dir ein Array auf - 2 Spalten! In die erste Spalte packst Du eine Telefonnummer und in die 2. die recno(). Bis zu zwei Zeilen für jeden Datensatz, da ja jeder Datensatz zwei Nummern enthalten kann!
Dann sortierst Du nach der ersten Spalte und suchst Dir die raus, die in der ersten Spalte die Bedingung haben, die gewünscht ist.
Die jeweilige Datensatznummer packst Du in ein neues, eindimensionales Array.
Du könntest den Teil natürlich auch abkürzen, indem Du zwei einzelne Indexe hast (einen über jede Telefonnummer), die einzeln SCOPEst und Dir die jeweiligen Datensatznummern in einem gemeinsamen Array merkst.
Und dann setzt Du über Deine Datenbank einen Filter nach dem Schema:
SET FILTER TO aScan( aDATENSATZNUMMERN, RECNO() ) > 0
Viele Grüße,
Martin
passt - Danke!
Und Dein Filter im Moment ist wahrscheinlich ( .... == Feld1 ) .or. ( .... == Feld2 ) - oder?
Wenn ja, versuche das mal mit dem gemeinsam Hilfsfeld und dem $ - das geht eigentlich recht schnell...
Über wie viele Datensätze reden wir eigentlich?
Oder noch besser und viel einfacher:
Du baust Dir ein Array auf - 2 Spalten! In die erste Spalte packst Du eine Telefonnummer und in die 2. die recno(). Bis zu zwei Zeilen für jeden Datensatz, da ja jeder Datensatz zwei Nummern enthalten kann!
Dann sortierst Du nach der ersten Spalte und suchst Dir die raus, die in der ersten Spalte die Bedingung haben, die gewünscht ist.
Die jeweilige Datensatznummer packst Du in ein neues, eindimensionales Array.
Du könntest den Teil natürlich auch abkürzen, indem Du zwei einzelne Indexe hast (einen über jede Telefonnummer), die einzeln SCOPEst und Dir die jeweiligen Datensatznummern in einem gemeinsamen Array merkst.
Und dann setzt Du über Deine Datenbank einen Filter nach dem Schema:
SET FILTER TO aScan( aDATENSATZNUMMERN, RECNO() ) > 0
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Martin,
die Idee mit dem Array ist ja ansich ganz gut, da arbeite ich ansonsten sehr gerne mit. Aber wenn ich die ganzen Datensätze erst einlesen muß, dann kann ich ja auch gleich bei einem Filter bleiben.
Und sorry, wenn ich das sage: Kein Filter! Also auch kein
Ich glaube, ich schreibe das ganze Modul um, damit ich Indexbasiert suchen kann. Mal sehen, was dabei rauskommt.
Jan
die Idee mit dem Array ist ja ansich ganz gut, da arbeite ich ansonsten sehr gerne mit. Aber wenn ich die ganzen Datensätze erst einlesen muß, dann kann ich ja auch gleich bei einem Filter bleiben.
Und sorry, wenn ich das sage: Kein Filter! Also auch kein
Filter sind mir zu langsam. Und die Filterbedingung habe ich ja, da brauche ich kein Array für. Wenn überhaupt würde ich den Filter auf das Array legen. Aber das wiederum - siehe den ersten Absatz hier.Martin hat geschrieben:SET FILTER TO aScan( aDATENSATZNUMMERN, RECNO() ) > 0
Ich glaube, ich schreibe das ganze Modul um, damit ich Indexbasiert suchen kann. Mal sehen, was dabei rauskommt.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Index
Was soll denn in dem Browse alles angezeigt werden?
Du kannst die Daten ja vorfiltern und in das Array (zum Browse) alles reinnehmen, was Du dort brauchst...
Filter ist schnell! Sofern dabei nicht andauernd auf dem Bildschirm was angezeigt/aktualisiert werden muss (z.B. im Browse), geht das recht flott! Ich mache das so und habe bei einigen 1000 Datensätzen kein Problem, auf die Art einen Filter auf z.B. 40 Datensatznummern zu setzen (mit AScan). Allerdings zeige ich die 40 nicht in einem Browse an, sondern nur einen komplett in der Eingabemaske. Und beim Blättern wird halt der nächste angezeigt. Das geht aber genauso schnell, wie ohne Filter!
Viele Grüße,
Martin
Du kannst die Daten ja vorfiltern und in das Array (zum Browse) alles reinnehmen, was Du dort brauchst...
Filter ist schnell! Sofern dabei nicht andauernd auf dem Bildschirm was angezeigt/aktualisiert werden muss (z.B. im Browse), geht das recht flott! Ich mache das so und habe bei einigen 1000 Datensätzen kein Problem, auf die Art einen Filter auf z.B. 40 Datensatznummern zu setzen (mit AScan). Allerdings zeige ich die 40 nicht in einem Browse an, sondern nur einen komplett in der Eingabemaske. Und beim Blättern wird halt der nächste angezeigt. Das geht aber genauso schnell, wie ohne Filter!
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Martin,
genau das ist das Problem. Ich skippe durch ein Browse, und abhängig von dem aktuellen Datensatz muß ich dazugehörige Daten anzeigen. Und dazu muß ich die passenden Daten wie oben beschrieben zusammensuchen. Genau das dauert einfach zu lange. manchmal bis zu 1 Sekunde. Das ist für ein ordentliches Arbeiten mit dem Browse nicht hinnehmbar.
Jan
genau das ist das Problem. Ich skippe durch ein Browse, und abhängig von dem aktuellen Datensatz muß ich dazugehörige Daten anzeigen. Und dazu muß ich die passenden Daten wie oben beschrieben zusammensuchen. Genau das dauert einfach zu lange. manchmal bis zu 1 Sekunde. Das ist für ein ordentliches Arbeiten mit dem Browse nicht hinnehmbar.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Index
hi,
ich versuche mal zusammen zufassen:
wobei NIL für "keine Anzeige" stehen würde
Eine Columne entspricht doch 1 FELD und eine Row einer Record No., deshalb sehe ich nicht wie man den Inhalt von 2 FELDern eines Records "untereinander" in eine Columne anzeigen könnte.
Du musst ja nicht "abwarten" bis EOF() sondern könntest per Thread die Daten "nachladen" während du eine Listbox präsentierst.
was nun die Überschrift INDEX angeht : bei Telefonnummer verwende ich über "alle" FELDer einen Index für OrdwildSeek()
man kann auch einen DbSkipper mit OrdwildSeek() bauen, aber man sollte bedenken das es kein "SKIP -1" in dem Sinne gibt.
Man muss also mit OrdwildSeek(Descend()) es simulieren und eine Logik (up/down) entwicken.
Jedoch ist so was "nicht schnell", also doch wieder eine Listbox für die "Treffer" ?
ich versuche mal zusammen zufassen:
aha also ein BrowseJan hat geschrieben:Ich skippe durch ein Browse, und abhängig von dem aktuellen Datensatz muß ich dazugehörige Daten anzeigen. Und dazu muß ich die passenden Daten wie oben beschrieben zusammensuchen. Genau das dauert einfach zu lange. manchmal bis zu 1 Sekunde. Das ist für ein ordentliches Arbeiten mit dem Browse nicht hinnehmbar.
also als "Formel" wäre es dannJan hat geschrieben:In einem der beiden Felder steht die Mobilnummer, im anderen die Festnetz. Welche in welchem Feld steht kann variieren. Ich muß alle 0163nnn
Code: Alles auswählen
IF( "0163" $ FELD1,;
FELD1,;
IF("0163" $ FELD2,;
FELD2,NIL))
hm ... ich fürchte "untereinander" geht nicht.Jan hat geschrieben:Martin, ich brauche (um bei Deinem Beispiel zu bleiben) beide Telefonnummern untereinander. In einer sortierten Liste.
Eine Columne entspricht doch 1 FELD und eine Row einer Record No., deshalb sehe ich nicht wie man den Inhalt von 2 FELDern eines Records "untereinander" in eine Columne anzeigen könnte.
klar, aber da du ja erstmal die Datensätze ermitteln musst welche deinem "0163" entsprechen wäre eine Array mein Favorit.Jan hat geschrieben:Ich brauche keine Kombination aus beiden Nummern, ich brauche die nicht parallel, ich brauche die in einer einzigen Sortierung, ohne Rang nach Feldherkunft.
Du musst ja nicht "abwarten" bis EOF() sondern könntest per Thread die Daten "nachladen" während du eine Listbox präsentierst.
was nun die Überschrift INDEX angeht : bei Telefonnummer verwende ich über "alle" FELDer einen Index für OrdwildSeek()
man kann auch einen DbSkipper mit OrdwildSeek() bauen, aber man sollte bedenken das es kein "SKIP -1" in dem Sinne gibt.
Man muss also mit OrdwildSeek(Descend()) es simulieren und eine Logik (up/down) entwicken.
Jedoch ist so was "nicht schnell", also doch wieder eine Listbox für die "Treffer" ?
gruss by OHR
Jimmy
Jimmy
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Index
Hi Jan,
vielleicht habe ich das nicht richtig verstanden. Aber warum machst du es nicht so.
use 123 exclusive
index on feld1 tag "feld1" to "123.cdx"
index on feld2 tag "feld2" to "123.cdx"
und wenn du suchen musst - 123->(ordsetfocus("feld1")) -
vielleicht habe ich das nicht richtig verstanden. Aber warum machst du es nicht so.
use 123 exclusive
index on feld1 tag "feld1" to "123.cdx"
index on feld2 tag "feld2" to "123.cdx"
und wenn du suchen musst - 123->(ordsetfocus("feld1")) -
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Rolf,
nein, Du hast mich garnicht verstanden. Ich brauche nicht 2 Indizee. Ich brauche einen, der beide Werte hintereinander beinhaltet. Wie ich bereits ein paar Mal betont habe.
Jan
nein, Du hast mich garnicht verstanden. Ich brauche nicht 2 Indizee. Ich brauche einen, der beide Werte hintereinander beinhaltet. Wie ich bereits ein paar Mal betont habe.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Index
So,
jetzt gebe ich noch meinen Senf dazu. Wie sieht es aus, wenn Du eine getrennte DB anlegst, in die nur die Recno() oder ID der Person kommt und die Telefonnummer. Es können dann x-beliebig viele Telefonnummern, der Person erfaßt werden. Die kommen dann hintereinander.
Oder ist das jetzt auch falsch?
jetzt gebe ich noch meinen Senf dazu. Wie sieht es aus, wenn Du eine getrennte DB anlegst, in die nur die Recno() oder ID der Person kommt und die Telefonnummer. Es können dann x-beliebig viele Telefonnummern, der Person erfaßt werden. Die kommen dann hintereinander.
Oder ist das jetzt auch falsch?
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!!
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!!
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Index
Manfred,
Du hast mir jetzt ja gerade noch gefehlt
Nein, externe Datenbank ist keine Option. Das mit der Telefonnummer war ja nur ein Beispiel, das Martin vorgeschlagen hat und an dem ich mein Problem beispielhaft erläutern wollte. Eine extra Datenbank nur dafür wäre mir zu aufwändig zu verwalten und mitzuführen. Ich bin ja durchaus für Normalisierungen, aber nicht um jeden Preis.
Also: Kein Array, kein Filter (den ich ja gerade loswerden möchte), keine externe Datenbank, kein kombinierter Index (in dem Sinne von Telefonnummer1+Telefonnummer2), keine zwei getrennte Indizee.
Ich gebe ja zu, daß das schwer oder sogar unmöglich ist. An einer Stelle habe ich deswegen schon das Programm umgeschrieben, um das anders zu lösen, das funktioniert sehr gut und erwartet schnell. An einer anderen Stelle war mir das noch nicht möglich. Ich könnte mir vorstellen, daß das mit SQL-Syntax als Query das gehen könnte. Die sind da oft flexibler und schneller. Wenn auch die SQL-Syntax nicht immer einfacher ist. Mal sehen, was Arctica mir da bieten könnte.
Jan
Du hast mir jetzt ja gerade noch gefehlt
Nein, externe Datenbank ist keine Option. Das mit der Telefonnummer war ja nur ein Beispiel, das Martin vorgeschlagen hat und an dem ich mein Problem beispielhaft erläutern wollte. Eine extra Datenbank nur dafür wäre mir zu aufwändig zu verwalten und mitzuführen. Ich bin ja durchaus für Normalisierungen, aber nicht um jeden Preis.
Also: Kein Array, kein Filter (den ich ja gerade loswerden möchte), keine externe Datenbank, kein kombinierter Index (in dem Sinne von Telefonnummer1+Telefonnummer2), keine zwei getrennte Indizee.
Ich gebe ja zu, daß das schwer oder sogar unmöglich ist. An einer Stelle habe ich deswegen schon das Programm umgeschrieben, um das anders zu lösen, das funktioniert sehr gut und erwartet schnell. An einer anderen Stelle war mir das noch nicht möglich. Ich könnte mir vorstellen, daß das mit SQL-Syntax als Query das gehen könnte. Die sind da oft flexibler und schneller. Wenn auch die SQL-Syntax nicht immer einfacher ist. Mal sehen, was Arctica mir da bieten könnte.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Index
Hi,
du brauchst einen custom Index, ich habe damit zwar keine Erfahrung, aber nach der Beschreibung von OrdSetCustom([lSet]) -> lCustom ...
du brauchst einen custom Index, ich habe damit zwar keine Erfahrung, aber nach der Beschreibung von OrdSetCustom([lSet]) -> lCustom ...
wenn du also dann je Datensatz 2 Indexeinträge anlegst, dann sollte das funktionieren, aber bedenke ! immer gleiche Länge der Indexschlüssel !Es müssen nun die Schlüsselwerte manuell mittels der Funktionen OrdKeyAdd() und OrdKeyRemove() gepflegt werden.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Index
hi,
was würde also bei einem SKIP +/-1 passieren und wie würde eine (!!!) Columne "untereinander" die beiden FELDer darstellen ?
Ich "denke" das Problem ist weniger der Index, Scope, Filter sondern die optische Darstellung wie Jan sie haben möchte.
man müsstest schon ein (optisches) Multiline Browse bauen, also eine extra Columne Class...
beide "0163" kommen in einen String mit einem "Trenner" welcher später als "wordwrap" benutzt wird.
je nach Anzahl von Elementen wird nun die Höhe der "Cell" berechnet sodas man alle "0163" nun "untereinander" sieht... hm ... hatte da Diego nicht mal was ...
Ein Windows Control wie "Browse", welches auf eine Datenbank "direkt" ansetzt, gibt es ja nicht.
wir arbeiten ja Datensatz orientiert sowie der DBSkipper sich auch Satzweise "bewegt"
Ich könnte mir eine Arctica DbServer Class vorstellen die eine "Anfrage" bekommt und ein Object zurück liefert.
Diese würden wir mit XbpQuickBrowse() bearbeiten da sie ähnlich eines PagedDataSource Objekt ist.
Wie ich mit Objecten dann aber einzelne Masken (Liste -> Detail) machen soll (locking?) wenn die Anzeige nur den "Verweis" zu Datenquelle darstellt
und ich nicht physikalisch auf dem Record "stehe" (debugger)... hm
Nope ich "denke" nicht denn wenn ich das richtig verstanden habe sind die beiden FELDer ja vom selben Record No.brandelh hat geschrieben:wenn du also dann je Datensatz 2 Indexeinträge anlegst, dann sollte das funktionieren,
was würde also bei einem SKIP +/-1 passieren und wie würde eine (!!!) Columne "untereinander" die beiden FELDer darstellen ?
Ich "denke" das Problem ist weniger der Index, Scope, Filter sondern die optische Darstellung wie Jan sie haben möchte.
man müsstest schon ein (optisches) Multiline Browse bauen, also eine extra Columne Class...
beide "0163" kommen in einen String mit einem "Trenner" welcher später als "wordwrap" benutzt wird.
je nach Anzahl von Elementen wird nun die Höhe der "Cell" berechnet sodas man alle "0163" nun "untereinander" sieht... hm ... hatte da Diego nicht mal was ...
die grosse Frage ist wie Alaska die Arctica Syntax in Xbase++ eingebunden hat.Jan hat geschrieben:Ich könnte mir vorstellen, daß das mit SQL-Syntax als Query das gehen könnte. Die sind da oft flexibler und schneller. Wenn auch die SQL-Syntax nicht immer einfacher ist. Mal sehen, was Arctica mir da bieten könnte.
Ein Windows Control wie "Browse", welches auf eine Datenbank "direkt" ansetzt, gibt es ja nicht.
wir arbeiten ja Datensatz orientiert sowie der DBSkipper sich auch Satzweise "bewegt"
Ich könnte mir eine Arctica DbServer Class vorstellen die eine "Anfrage" bekommt und ein Object zurück liefert.
Diese würden wir mit XbpQuickBrowse() bearbeiten da sie ähnlich eines PagedDataSource Objekt ist.
Wie ich mit Objecten dann aber einzelne Masken (Liste -> Detail) machen soll (locking?) wenn die Anzeige nur den "Verweis" zu Datenquelle darstellt
und ich nicht physikalisch auf dem Record "stehe" (debugger)... hm
gruss by OHR
Jimmy
Jimmy