Freigeben über


Relatives und absolutes Scrollen

Die meisten Bildlaufoptionen in SQLFetchScroll positionieren den Cursor relativ zur aktuellen Position oder zu einer absoluten Position. SQLFetchScroll unterstützt das Abrufen der nächsten, vorherigen, ersten und letzten Rowsets sowie das relative Abrufen (Abrufen des Rowset n-Zeilen vom Anfang des aktuellen Rowsets) und das absolute Abrufen (Abrufen des Rowsets ab Zeile n). Wenn n in einem absoluten Abruf negativ ist, werden Zeilen vom Ende des Resultsets gezählt. Ein absoluter Abruf von Zeile -1 bedeutet daher, das Rowset abzurufen, das mit der letzten Zeile im Resultset beginnt.

Dynamische Cursor erkennen Zeilen, die in das Resultset eingefügt und gelöscht werden, daher gibt es keine einfache Möglichkeit für dynamische Cursor, die Zeile an einer bestimmten Zahl abzurufen, die nicht vom Anfang des Resultsets gelesen wird, was wahrscheinlich langsam ist. Darüber hinaus ist das absolute Abrufen in dynamischen Cursorn nicht sehr nützlich, da Zeilennummern sich ändern, wenn Zeilen eingefügt und gelöscht werden; Daher kann das aufeinander folgende Abrufen derselben Zeilennummer unterschiedliche Zeilen liefern.

Anwendungen, die SQLFetchScroll nur für ihre Blockcursorfunktionen verwenden, z. B. Berichte, werden wahrscheinlich ein einziges Mal über das Resultset geleitet, wobei nur die Option zum Abrufen des nächsten Rowsets verwendet wird. Bildschirmbasierte Anwendungen können dagegen alle Funktionen von SQLFetchScroll nutzen. Wenn die Anwendung die Rowsetgröße auf die Anzahl der Zeilen festlegt, die auf dem Bildschirm angezeigt werden, und die Bildschirmpuffer an das Resultset gebunden werden, kann sie Bildlaufleistenvorgänge direkt in Aufrufe von SQLFetchScroll übersetzen.

Bildlaufleistenvorgang SQLFetchScroll-Bildlaufoption
Bild auf SQL_FETCH_PRIOR
Bild ab SQL_FETCH_NEXT
Zeile auf SQL_FETCH_RELATIVE mit FetchOffset gleich -1
Zeile ab SQL_FETCH_RELATIVE mit FetchOffset gleich 1
Bildlauffeld oben SQL_FETCH_FIRST
Bildlauffeld unten SQL_FETCH_LAST
Zufällige Bildlauffeldposition SQL_FETCH_ABSOLUTE

Solche Anwendungen müssen das Bildlauffeld auch nach einem Bildlaufvorgang positionieren, was die aktuelle Zeilennummer und die Anzahl der Zeilen erfordert. Für die aktuelle Zeilennummer können Anwendungen entweder die aktuelle Zeilennummer nachverfolgen oder SQLGetStmtAttr mit dem SQL_ATTR_ROW_NUMBER-Attribut aufrufen, um sie abzurufen.

Die Anzahl der Zeilen im Cursor, die die Größe des Resultsets ist, ist als SQL_DIAG_CURSOR_ROW_COUNT Feld des Diagnoseheaders verfügbar. Der Wert in diesem Feld wird nur definiert, nachdem SQLExecute, SQLExecDirect oder SQLMoreResult aufgerufen wurde. Diese Anzahl kann abhängig von den Funktionen des Treibers entweder eine ungefähre Oder eine genaue Anzahl sein. Die Unterstützung des Treibers kann durch Aufrufen von SQLGetInfo mit den Cursorattributen Informationstypen bestimmt und überprüft werden, ob das SQL_CA2_CRC_APPROXIMATE oder SQL_CA2_CRC_EXACT Bit für den Cursortyp zurückgegeben wird.

Eine genaue Zeilenanzahl wird für einen dynamischen Cursor nie unterstützt. Bei anderen Cursortypen kann der Treiber die genaue oder ungefähre Zeilenanzahl unterstützen, aber nicht beides. Wenn der Treiber weder genaue noch ungefähre Zeilenanzahlen für einen bestimmten Cursortyp unterstützt, enthält das feld SQL_DIAG_CURSOR_ROW_COUNT die Anzahl der Zeilen, die bisher abgerufen wurden. Unabhängig davon, was der Treiber unterstützt, führt SQLFetchScroll mit einem Vorgang von SQL_FETCH_LAST dazu, dass das feld SQL_DIAG_CURSOR_ROW_COUNT die genaue Zeilenanzahl enthält.