Recuperación de datos con marcadores en una aplicación CLI

Los marcadores, disponibles solo cuando se utilizan cursores desplazables, le permiten guardar una referencia a cualquier fila de un conjunto de resultados. Puede aprovechar esta característica al recuperar datos. En este tema se describe cómo recuperar datos utilizando marcadores.

Antes de empezar

Antes de recuperar datos con marcadores, asegúrese de que ha inicializado la aplicación CLI . Los pasos que se explican aquí se deben realizar además de los que se describen en "Recuperación de datos con cursores desplazables en una aplicación CLI ".

Procedimiento

Para utilizar marcadores con cursores desplazables para recuperar datos:

  1. Indique qué marcadores se utilizarán (si no lo ha hecho ya) estableciendo el atributo de sentencia SQL_ATTR_USE_BOOKMARKS en SQL_UB_VARIABLE.
    Por ejemplo:
      sqlrc = SQLSetStmtAttr (hstmt,
                              SQL_ATTR_USE_BOOKMARKS,
                              (SQLPOINTER) SQL_UB_VARIABLE,
                              0);
    
  2. Obtenga el valor de marcador de la fila necesaria en el conjunto de filas después de ejecutar la sentencia SELECT y recuperar el conjunto de filas utilizando SQLFetchScroll(). Para ello, llame a SQLSetPos() para colocar el cursor en el conjunto de filas. A continuación, llame a SQLGetData() para recuperar el valor de marcador.
    Por ejemplo:
        sqlrc = SQLFetchScroll(hstmt, SQL_FETCH_ABSOLUTE, 15);
        /* ... */
        sqlrc = SQLSetPos(hstmt, 3, SQL_POSITION, SQL_LOCK_NO_CHANGE);
        /* ... */
        sqlrc = SQLGetData(hstmt, 0, SQL_C_LONG, bookmark.val, 4,
                           &bookmark.ind);

    En la mayoría de los casos, no deseará enlazar la columna 0 ni recuperar el valor de marcador para cada fila, sino utilizar SQLGetData() para recuperar el valor de marcador para la fila especifica que necesite.

  3. Almacene la ubicación del marcador para la siguiente llamada a SQLFetchScroll(). Establezca el atributo de sentencia SQL_ATTR_FETCH_BOOKMARK en la variable que contiene el valor de marcador. Por ejemplo, bookmark.val almacena el valor de marcador, por lo tanto, llame a SQLSetStmtAttr() como se indica a continuación:
        sqlrc = SQLSetStmtAttr(hstmt,
                               SQL_ATTR_FETCH_BOOKMARK_PTR,
                               (SQLPOINTER) bookmark.val,
                               0);
  4. Recupere un conjunto de filas basado en el marcador. Una vez almacenado el valor de marcador, la aplicación puede seguir utilizando SQLFetchScroll() para recuperar datos del conjunto de resultados. A continuación, la aplicación puede desplazarse por el conjunto de resultados, pero aún recuperar el conjunto de datos según la ubicación de la fila marcada en cualquier punto antes del cierre del cursor.
    La llamada siguiente a SQLFetchScroll() recupera un conjunto de filas a partir de la fila marcada:
        sqlrc = SQLFetchScroll(hstmt, SQL_FETCH_BOOKMARK, 0);
    El valor 0 especifica el desplazamiento. Especificaría -3 para empezar el conjunto de filas 3 filas antes de la fila marcada, o especificaría 4 para empezar 4 filas después. Por ejemplo, la siguiente llamada recupera un conjunto de 4 filas después de la fila marcada:
        sqlrc = SQLFetchScroll(hstmt, SQL_FETCH_BOOKMARK, 4);

    Tenga en cuenta que la variable utilizada para almacenar el valor de marcador no se especifica en la llamada SQLFetchScroll() . Se ha establecido en el paso anterior utilizando el atributo de sentencia SQL_ATTR_FETCH_BOOKMARK_PTR.