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…
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