vertikal Scrollbar Anzeige / relative Position ?

hi,

ich möchte eine “grosse” Table als Liste anzeigen. Da nun nicht alles auf eine Seite passt
benötige ich einen vertikalen Scrollbar.

Frage : gibt es die Möglichkeit die “relative” Position in einem “ORDER BY” zu ermitteln ?

es geht darum den vertikalen Scrollbar zu “platzieren” wenn ich per PG_DOWN oder PG_UP navigiere.

Frage : was verwendet ihr, in welcher Programmier-Sprache, um eine “Liste” darzustellen ? ListView ?





mein jetziger Workaround :

ich nutze z.Z. ein Field “__record” ( PRIMARY KEY ) welches bei “INSERT” mit NEXTVAL() inkrementiert wird.
damit fülle ich ein 2-Dim Array : “laufende” Nummer von einem “ORDER BY” und dazu dann “__record”

( Xbase++ Syntax )
LOCAL cRecord := "__record"
// nur 1 Field : __record
cQuery := "SELECT " + cRecord + " FROM " + cTable + " ORDER BY " + cOrder

// Query ausführen
oPG2:Exec( cQuery )
iMax := oResult:rows
IF iMax > 0
   FOR i := 1 TO iMax
      //
      // hole aus dem Result Set Ergebnis "__record" für jede Row -> i
      //
      cfieldRecno := Var2Char( oResult:FieldGet( i - 1, 0 ) )
      //
      // 2-Dim Array : [ i , cFieldRecno ]
      //
      AADD( ::aIndex, { i , cfieldRecno } )
   NEXT
   // sort cDBSfield
   ...
ENDIF

später suche ich dann im Array nach der “__record” und habe mit “i” dann die “laufende” Nummer wenn ich mit “ORDER BY” die Sortierung in einer “Liste” ändere.

NEXTVAL() kann durchaus Lücken haben, es können auch Datensätze gelöscht sein. Daher ist halte ich es für FAIL, mittels einer durch nextval() gefüllten Spalte und der Gesamtanzahl des Resultsets die ‘aktuelle’ Position zu ermitteln. Hint: row_number() wurde bereits erfunden…


Andreas

Ja. besonders im Netzwerk könnten sich die Clients in die Quere kommen. Das “sollte” aber Problem der Client Application sein.

Ich wollte nur das Prinzip des Array darstellen was ich für den Workaround verwende

deine “Nebensätze” finde ich toll, die enthalten meisten das “Stichwort” was mir fehlt.

tatsächlich ist in meinem “German PDF” von 2003 kein Eintrag über “row_number()” … da muss ich mir mal genauer ansehen. ( 9.19. Window Functions )


ich “befürchte” aber es ist immer noch nicht das was ich meine :

ORDER BY Col1
Col1      Col2

AAA      CCC 
BBB       LLL      -> hier stehe ich -> __record = 2
CCC      ZZZ
DDD      KKK 
EEE       DDD



ORDER BY Col2

AAA      CCC   -> jetzt steh ich hier
EEE       DDD
DDD      KKK   
BBB       LLL    -> und hier will ich hin -> __record = 2
CCC      ZZZ

Absicht.

tatsächlich ist in meinem “German PDF” von 2003 kein Eintrag über "> row_number()> " … da muss ich mir mal genauer ansehen. ( 9.19. Window Functions )


ich “befürchte” aber es ist immer noch nicht das was ich meine :

ORDER BY Col1
Col1 Col2

AAA CCC
BBB LLL -> hier stehe ich -> __record = 2
CCC ZZZ
DDD KKK
EEE DDD

ORDER BY Col2

AAA CCC -> jetzt steh ich hier
EEE DDD
DDD KKK
BBB LLL -> und hier will ich hin -> __record = 2
CCC ZZZ

>
\
<br>
```text
test=# create table ohr(col1 text, col2 text);
CREATE TABLE
test=*# copy ohr from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> aaa  ccc
>> bbb  lll
>> ccc  zzz
>> ddd  kkk
>> eee  ddd
>> \.
test=*# commit;
COMMIT
test=# select col1, col2, row_number() over (order by col1) from ohr order by col1;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 bbb  | lll  |          2
 ccc  | zzz  |          3
 ddd  | kkk  |          4
 eee  | ddd  |          5
(5 rows)

test=*# select col1, col2, row_number() over (order by col1) from ohr order by col2;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 eee  | ddd  |          5
 ddd  | kkk  |          4
 bbb  | lll  |          2
 ccc  | zzz  |          3
(5 rows)

test=*# select col1, col2, row_number() over (order by col2) from ohr order by col1;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 bbb  | lll  |          4
 ccc  | zzz  |          5
 ddd  | kkk  |          3
 eee  | ddd  |          2
(5 rows)

test=*# select col1, col2, row_number() over (order by col2) from ohr order by col2;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 eee  | ddd  |          2
 ddd  | kkk  |          3
 bbb  | lll  |          4
 ccc  | zzz  |          5
(5 rows)

Such Dir aus, was Dir gefällt.

Hint: row_number() kann auch sortieren, nicht nur SELECT.


Andreas

hi,

das sieht doch schon mal gut aus, DANKE !