Index

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

Moderator: Moderatoren

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Index

Beitrag von brandelh »

Hi Jimmy,

aber genau für solche Probleme wurde der custom Index geschaffen !
Bei einem Browse muss man selbst natürlich die skip() Blöcke und die Anzeige so einstellen, dass es dem Wunsch entspricht,
für dbskip() wird man dann wohl auch eine eigene Funktion brauchen, die beim Skippen die recno() vergleicht, wenn man
keine doppelten Zeilen will.

JAN schrieb:
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...
... Ich möchte das lieber über Scopes machen. Aber da kann man auch nur einen gleichzeitig je dbf setzen.
also einschränken und suchen, das müsste damit gut gehen. Wenn man Listboxen / Browser etc. braucht muss man halt genau überlegen was man will, es könnte z.B. durchaus Sinn machen 2 Zeilen auf den gleichen Datensatz zeigen zu lassen ;-)
Gruß
Hubert
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: Index

Beitrag von Markus Walter »

Hallo Jan,

ich habe ein oder 2 ähnliche Fälle in meiner Applikation. Aus meiner Sicht gibt es zwei Lösungsansätze, die aber beide schon genannt wurden:
1. Custom-Index
2. ein Array aufbauen (2x Index, Scopen, in Array einlesen - oder ordwildseek verwenden) und einen Array-Browser verwenden

Wenn beides nicht schnell genug ist, hilft wohl nur normalisieren...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Index

Beitrag von Rudolf »

Hallo,
hier die Antwort von Steffen auf meine Frage bezüglich Browser mit Arctica. Mit SQL geht das ganz sicher. Für die DBF's verwende ich in solchen Fällen im eXPress++ dc_setscopearray(aRecords). Ich suche über die verschiedenen Indexe die Datensätze zusammen und setze dann den scope drauf. Ist sehr schnell und einfach. Auch wenn ich die kompletten Daten in ein Array einlese ist die Geschwindigkeit bei mir noch absolut akzeptabel.

Grüsse
Rudolf

Steffen F. Pirsig schrieb:
> Rudolf,
>
> you don't have to care about that anymore. Its all done by the
> PostgreSQL DatabaseEngine with very good performance
> characteristics.
>
> regards
> Steffen F. Pirsig
> Alaska Software
>
>
> "Rudolf Reinthaler" wrote in message news:58963806$4470590e$171f6@news.alaska-software.com...
>> Hello,
>> the greatest problems for changing to SQL for me, are using browser with SQL tables. How can Arctica show a large Table in a browser ? Or is it only possible to select a subset ? Most of my dialogs are based on browsers with incremental search over the whole database, so the change to SQL would need an intelligent browser that can handle such things.
>> regards
>> Rudolf
RolandG
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim

Re: Index + OrdSetCustom

Beitrag von RolandG »

Hallo Jan,
ich habe ein ähnliches Problem wie Du im ursprünglichen Beitrag geschrieben hast.
Ich finde aber zu OrdKeyAdd() oder OrdKeyRemove() kein Beispiel welches mir die Vorgehensweise mit einem Custom Index verdeutlicht.
Vermutlich stecke ich nicht so tief im Xbase++ System dass ich mit den kurzen Beschreibungen in der Hilfe was anfangen kann.

Es geht darum, dass ich bei einem einfachen Index "Stichwort C 10" bei manchen Records ein zweites Stichwort reinbringen möchte.
Ob das am Ende das gewünschte Ergebnis bringt weiß ich auch noch nicht, kann es ja nicht einmal aufbauen.

Vielleicht so:
Select ZWEI
DbCreateIndex(...) z.B. Upper( STICHTORT1 )
OrdSetCustom()
dann habe ich erst einmal einen Custom Index (?)
Wie und mit welchen Parametern?
Es soll jetzt z.B. in den Index für Record 3 noch das zweite Stichwort hinzugefügt werden, Upper( STICHWORT2 )
Ich würde jetzt z.B. OrdKeyAdd( Upper( STICHWORT2 ) , <RecNo> ) o.ä. "vermuten" steht aber nirgends.
Dasselbe bei OrdKeyRemove()
oder bezieht sich das immer auf den aktuellen Record ?
Der Record stht aber (gewollter Weise) mehrmals im Index, welchen löscht OrdKeyRemove dann?
Bei einer DBF habe ich ja eine aktuelle Position (RecNo), aber beim Custom-Index?

Eine Start-/Denkhilfe würde mich freuen.

MfG
Roland
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 863
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 40 Mal
Danksagung erhalten: 197 Mal
Kontaktdaten:

Re: Index

Beitrag von Marcus Herz »

Die Lösung hab ich nicht kann mir auch unter Gegebenheiten keine vorstellen.
Aber man sieht mal wieder eine normisisrte Datenbank könnte das
Gruß Marcus

Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
RolandG
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim

Re: Index Custom

Beitrag von RolandG »

Hallo

Habe inzwischen viel rumprobiert, ein Bischen was geht, die wichtigen Dinge nicht.

Den Custom Index kann ich erstellen, der ist aber nicht leer, wird aber mit OrdIsCustom() .T. angezeigt.
Der Custom Index hat die selbe Größe wie der mit den gefüllten Feldern (zum Vergleich).
Bei OrdKeyAdd() und OrdKeyRemove() tut sich nichts immer .F: als Rückgabe.

Code: Alles auswählen

Function Cust14( nIx , cFile , cAl )

* Info: Feld A + B + X sind Character 10

Local cTag    := "CIX"
Local nTag    := 1
Local nGesRec
Local nCnt1

DbSelectArea( cAl )
nGesRec := LastRec()

INDEX ON X TAG nTag TO ( cFile ) CUSTOM

? "OrdIsCustom(): " , Var2Char( OrdIsCustom() )

For nCnt1 := 1 To nGesRec

   DbGoTo( nCnt1 )

   /* KEY 1 - Standard-Schlüssel */   // nur zum Test, es geht auch schneller...
   X := A
?   RecNo() , X , OrdKeyAdd( nTag )

   /* KEY 2 - Hilfs-Schlüssel */
   /* hier sollte der zweite Eintrag eines Records im Index stattfinden */
   If ! Empty( B ) .And. A <> B
      X := B
?    RecNo() , B , OrdKeyAdd( nTag )
   EndIf

Next nCnt1

Return .T.
Irgendwie ist es ja doch kein 100%iger Custom Index.
Die Angabe in Index On X To usw. - X ist ja scheinbar das Bindeglied welches OrdKeyAdd() benötigt um den Wert für den Index zu übernehmen.
RolandG
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim

Re: Index

Beitrag von RolandG »

viele Versuche später...

- der Index lässt sich vermeintlich als Custom erstellen, OrdIsCustom() zeigt .T.
- der Index hat aber die selbe Größe wie der "normal" erstellte Index auf das Feld
. der Custom Index wird also nicht leer erstellt wie im Handbuch von Xbase++ und ADS steht,
- bei OrdKeyRemove() und OrdKeyRemove() passiert nichts, beide Rückgabewerte = .F.
- ohne und mit mit Tag (in jeder Form) gleiche Reaktion = keine

Mit einer leeren Datenbank habe ich es noch nicht versucht, da wäre der Index ja automatisch leer...

Ob da bei der Xbase++ Version ein Fehler vorliegt?
Die Funktionsfähigkeit von Custom Index mangels User-Interesse nicht mehr im Test-Focus...?
Muss ja mal gegangen sein https://www.xbaseforum.de/viewtopic.php?t=2194

Grüße,
Roland
RolandG
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim

Re: Index

Beitrag von RolandG »

...liegt am ADS, den habe ich im Einsatz und der macht das nicht. Ohne ADS geht es.

Roland
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 863
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 40 Mal
Danksagung erhalten: 197 Mal
Kontaktdaten:

Re: Index

Beitrag von Marcus Herz »

ADS kann doch Custom Index!
Gruß Marcus

Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
RolandG
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim

Re: Index

Beitrag von RolandG »

Hallo Markus

der Custom Index wird vom ADS auch erstellt, aber
- nicht leer (gefüllt wie ein normaler Index),
- OrdKeyAdd() bringt immer .F.,
- OrdKeyRemove() bringt immer .F.,

OrdIsCustom() meldet aber .T.

Gruß
Roland
RolandG
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim

Re: Index

Beitrag von RolandG »

Hallo,
meine Frage(n) haben sich soweit [erledigt].
Habe mir selbst sowas wie einen Custom Index "zusammengebaut".
MfG
Roland
Antworten