Index

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

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
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.
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
: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
Jan
Marvin
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

Beitrag von Jan »

Was soll denn die blöde Eingangsfrage? Du hast doch genau verstanden, was ich will.

Tststs :wink:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

Nö - nicht wirklich. Nur vermutet! Aber damit lag ich ja richtig!
So was geht natürlich nicht! Behaupte ich mal 8)
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
: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
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
: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.
Juergen
UDF-Programmierer
UDF-Programmierer
Beiträge: 92
Registriert: Di, 19. Dez 2006 19:37
Wohnort: Düsseldorf
Kontaktdaten:

Re: Index

Beitrag von Juergen »

Hallo Jan,

könnte da vielleicht OrdWildSeek() (siehe Alaska-Hilfe) helfen?

Gruß Jürgen
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
: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
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
: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: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Index

Beitrag von Martin Altmann »

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
: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
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
: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
Jan
Marvin
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

Beitrag von Jan »

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
Martin hat geschrieben:SET FILTER TO aScan( aDATENSATZNUMMERN, RECNO() ) > 0
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.

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.
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
: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
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi,

ich versuche mal zusammen zufassen:
Jan 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.
aha also ein Browse ;)
Jan 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
also als "Formel" wäre es dann

Code: Alles auswählen

IF( "0163" $ FELD1,;
                 FELD1,;
 IF("0163" $ FELD2,;
                 FELD2,NIL))
wobei NIL für "keine Anzeige" stehen würde
Jan hat geschrieben:Martin, ich brauche (um bei Deinem Beispiel zu bleiben) beide Telefonnummern untereinander. In einer sortierten Liste.
hm ... ich fürchte "untereinander" geht nicht.

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.
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.
klar, aber da du ja erstmal die Datensätze ermitteln musst welche deinem "0163" entsprechen wäre eine Array mein Favorit.
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
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Index

Beitrag von Rolf Ramacher »

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")) -
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

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? :munky2:
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: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Index

Beitrag von Jan »

Manfred,

Du hast mir jetzt ja gerade noch gefehlt :lol:

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.
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

Hi,

du brauchst einen custom Index, ich habe damit zwar keine Erfahrung, aber nach der Beschreibung von OrdSetCustom([lSet]) -> lCustom ...
Es müssen nun die Schlüsselwerte manuell mittels der Funktionen OrdKeyAdd() und OrdKeyRemove() gepflegt werden.
wenn du also dann je Datensatz 2 Indexeinträge anlegst, dann sollte das funktionieren, aber bedenke ! immer gleiche Länge der Indexschlüssel !
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:wenn du also dann je Datensatz 2 Indexeinträge anlegst, dann sollte das funktionieren,
Nope ich "denke" nicht denn wenn ich das richtig verstanden habe sind die beiden FELDer ja vom selben Record No.

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 ...
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.
die grosse Frage ist wie Alaska die Arctica Syntax in Xbase++ eingebunden hat.

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
Antworten