Index [Erledigt]
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 197
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 4 Mal
Index [Erledigt]
Hallo zusammen,
ich habe folgendes Problem:
Vereinfacht gesagt habe ich eine Tabelle mit zwei Spalten (spalte1,spalte2)
Ich möchte einen Indexerzeugen der mit diese beiden spalten sortiert (spalte1+spalte2). Das funktioniert auch, solange spalte 1 befüllt ist.
Ist diese leer wird Spalte2 nicht mehr sortiert. Folgende ausdrücke habe ich bereits ohne Erfolg versucht.
-Spalte1+Spalte2
-Alltrim(Spalte1)+Alltrim(Spalte2)
-PadR(trim(Spalte1),50," ")+Spalte2
-PadR(trim(Spalte1),50,"X")+Spalte2
-PadR(trim(Spalte1)+Trim(Spalte2),100," ")
Ich stehe auf dem Schlauch ...
ich habe folgendes Problem:
Vereinfacht gesagt habe ich eine Tabelle mit zwei Spalten (spalte1,spalte2)
Ich möchte einen Indexerzeugen der mit diese beiden spalten sortiert (spalte1+spalte2). Das funktioniert auch, solange spalte 1 befüllt ist.
Ist diese leer wird Spalte2 nicht mehr sortiert. Folgende ausdrücke habe ich bereits ohne Erfolg versucht.
-Spalte1+Spalte2
-Alltrim(Spalte1)+Alltrim(Spalte2)
-PadR(trim(Spalte1),50," ")+Spalte2
-PadR(trim(Spalte1),50,"X")+Spalte2
-PadR(trim(Spalte1)+Trim(Spalte2),100," ")
Ich stehe auf dem Schlauch ...
Zuletzt geändert von Dominik Krebs am Do, 28. Jul 2022 11:19, insgesamt 1-mal geändert.
Gruß Dominik
- brandelh
- 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
Ein Indexbegriff benötigt immer die gleiche Länge !
Wenn du mit alltrim() arbeitest, musst du mit Blanks auffüllen.
2 Felder ohne Trim(), gibt die komplette Feldlänge beider als Summe.
Ansonsten die Länge abfragen oder festlegen, du kannst mit seek() auch linke Teilbegriffe suchen ...
Schreib doch mal was du erwartest, das erste Feld leer wird normal immer nach Oben (Blanks) sortieren.
Am Besten erzeugt man Such und Indexbegriff durch die gleiche Funktion.
Wenn du mit alltrim() arbeitest, musst du mit Blanks auffüllen.
2 Felder ohne Trim(), gibt die komplette Feldlänge beider als Summe.
Ansonsten die Länge abfragen oder festlegen, du kannst mit seek() auch linke Teilbegriffe suchen ...
Schreib doch mal was du erwartest, das erste Feld leer wird normal immer nach Oben (Blanks) sortieren.
Am Besten erzeugt man Such und Indexbegriff durch die gleiche Funktion.
Gruß
Hubert
Hubert
- brandelh
- 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
bei solchen Sachen nehme ich gerne die set alternate to ... Datei und drucke die Begriffe aus, so kann man sehen was tatsächlich erzeugt wird und in welcher Reihenfolge.
Wenn du die führenden Blanks entfernst, wird das 2. Feld in das erste einsortiert.
Mit führenden Blanks bzw. Inhalt, wird das 2. Feld nur sortiert, wenn im 1. Feld der gleiche Inhalt mehrfach vorkommt.
Wenn du die führenden Blanks entfernst, wird das 2. Feld in das erste einsortiert.
Mit führenden Blanks bzw. Inhalt, wird das 2. Feld nur sortiert, wenn im 1. Feld der gleiche Inhalt mehrfach vorkommt.
Gruß
Hubert
Hubert
- nightcrawler
- 1000 working lines a day
- Beiträge: 650
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
- Marcus Herz
- 1000 working lines a day
- Beiträge: 851
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 192 Mal
- Kontaktdaten:
Re: Index
kann auch ein NULL Problem sein, NULL + "HELLO" = NULList die Spalte leer
Gruß Marcus
Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Erkenne, was du findest, dann weißt du, wonach du gesucht hast
-
- Rekursionen-Architekt
- Beiträge: 197
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 4 Mal
Re: Index
Ja es handelt sich um eine ADT Tabelle, sorry habe wohl vergessen das zu erwähnen.
Ich möchte kein seek machen, mir geht es wirklich nur um die Sortierung im Browse. Beide Felder sind Char(50) und wenn ich mittels PadR auffüllen, Fülle ich auch auf 100 zeichen.
Eventuell wirklich das "Null Problem". Habe noch nichts davon gehört.
Und was hat das ";" genau für eine Bedeutung? Kenne ich so auch nicht 🫢
Ich möchte kein seek machen, mir geht es wirklich nur um die Sortierung im Browse. Beide Felder sind Char(50) und wenn ich mittels PadR auffüllen, Fülle ich auch auf 100 zeichen.
Eventuell wirklich das "Null Problem". Habe noch nichts davon gehört.
Und was hat das ";" genau für eine Bedeutung? Kenne ich so auch nicht 🫢
Gruß Dominik
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
Re: Index
Dominik,
was in Xbase++ NIL ist ist unter SQL NULL. Und wenn man die Datenbank so konfiguriert sind leere Felder automatisch NULL - wenn ich da noch richtig in Erinnerung hab ist NULL oftmals der Standard. Da muß man unter Xbase++ aufpassen, weil das dort anders erwartet wird, und dann scheppert das halt. Vielleicht kannst Du die Abfrage machen ob das Feld NULL ist, und in dem Fall nicht ein PadR() darauf machen, sondern ein Replicate().
Jan
was in Xbase++ NIL ist ist unter SQL NULL. Und wenn man die Datenbank so konfiguriert sind leere Felder automatisch NULL - wenn ich da noch richtig in Erinnerung hab ist NULL oftmals der Standard. Da muß man unter Xbase++ aufpassen, weil das dort anders erwartet wird, und dann scheppert das halt. Vielleicht kannst Du die Abfrage machen ob das Feld NULL ist, und in dem Fall nicht ein PadR() darauf machen, sondern ein Replicate().
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.
- Marcus Herz
- 1000 working lines a day
- Beiträge: 851
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 192 Mal
- Kontaktdaten:
Re: Index
Ok ADT:
Hier kann man Index mit
SPALTE1;SPALTE2
definieren. Aber Xbase++ kann damit kein Seek machen. (AdsClass++ kann das :-) )
Xbase++ kann aber die Tabelle aber richtig sortiert anzeigen
Die Sortierung stimmt auch bei NULL Werten, wenn SPALTE1 NULL IST, wird dann korrekt noch nach SPALTE2 sortiert. Und auch anders rum.
Alternativ kannst du im Index aber NULL abfangen
x ist Länge von Feld SPALTE1. Das sollte auch funktionieren
Besonders relevant ist dieses Problem mit leeren Datumsfeldern, die sind immer NULL
Hier kann man Index mit
SPALTE1;SPALTE2
definieren. Aber Xbase++ kann damit kein Seek machen. (AdsClass++ kann das :-) )
Xbase++ kann aber die Tabelle aber richtig sortiert anzeigen
Die Sortierung stimmt auch bei NULL Werten, wenn SPALTE1 NULL IST, wird dann korrekt noch nach SPALTE2 sortiert. Und auch anders rum.
Alternativ kannst du im Index aber NULL abfangen
Code: Alles auswählen
coalesce(SPALTE1, space(x))+SPALTE2
Besonders relevant ist dieses Problem mit leeren Datumsfeldern, die sind immer NULL
Gruß Marcus
Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Erkenne, was du findest, dann weißt du, wonach du gesucht hast