Qué son los cursores dinámicos

Resumen

En este artículo, vamos a tratar aspectos avanzados de los cursores de RDO que no se explican en la documentación de Visual Basic 4.0 para Windows.


Le remitimos a la ayuda en pantalla de Visual Basic para obtener información general sobre los diferentes tipos de cursores RDO.

Más información

Los Cursores Dinámicos no tienen un tamaño fijo de filas. Al movernos de un conjunto de filas a otro (el número de filas de cada conjunto está definido por la propiedad RowsetSize), el driver puede devolvernos cualquier número de filas. Este nuevo conjunto de filas o "rowset" debería incluir nuevas filas añadidas a la tabla a la hora de cumplir la cláusula where, pero es difícil saber dónde se van a mostrar (probablemente al final).


RDO es el encargado de ir al servidor cada vez que necesita un nuevo rowset (otra vez, el número de filas de cada conjunto está definido por la propiedad RowsetSize), por lo que los cambios hechos por otros usuarios no se harán visibles hasta entonces. El ajuste de la propiedad RowsetSize sirve para balancear rendimiento y frescura de datos. Debido a que las consultas al servidor son bastante caras, no se recomienda en un entorno cliente/servidor en el que tenemos una red por medio, ir al servidor vez que nos movemos a una nueva fila - el Jet hace esto precisamente , por lo que no es tan rápido como RDO a través de la red.


Los Bookmarks no se encuentran disponibles en Cursores Dynámicos - la propiedad Bookmarkable será siempre falsa para este tipo de cursores. El driver de SQL Server no lo permite entre otras cosas porque no existe la idea de identificar una fila como inamovible. Bookmarks trabajan con los rowsets pero no a través de ellos.


SQL Server no puede ser implementado como una base de datos ISAM. La idea final es poder hacer los sistemas cliente/servidor. RDO nos permite refrescar los datos constantemente si establecemos la propiedad RowsetSize = 1, pero esto se traduce en constantes accesos al servidor a través de la red, lo cual se hace notar en una bajada de rendimiento de la red, más acusada cuantos más usuarios tengamos en nuestro sistema. No es esta precisamente la mejor manera de implementar un sistema cliente/servidor sea cual sea nuestro DBMS o herramienta de desarrollo. RDO utiliza ODBC sin más, y esto es lo que le hace más rápido.




PROGRAMA DE EJEMPLO

En este ejemplo vamos a mostrar cómo crear un cursor dinámico rdoResultset. Emplearemos una conexión ODBC DSN-less por lo que no necesitamos establecer una fuente de datos con la utilidad de Administración ODBC.
  1. Creamos un nuevo proyecto en Visual Basic. Form1 se crea por defecto.
  2. Añadimos un botón de comando al Form1.
  3. Pegamos el siguiente código en la sección de Declaraciones Generales del Form1.


    Private Sub Command1_Click()

    Dim en As rdoEnvironment
    Dim cn As rdoConnection
    Dim rs As rdoResultset
    Dim sql As String

    'establecemos la conexión
    Set en = rdoEngine.rdoEnvironments(0)
    en.CursorDriver = rdUseIfNeeded

    'modificar para conectarnos a nuestra base de datos
    Dim cnStr As String

    cnStr = "driver={SQL Server};server=myserver;" & _
    "database=pubs;uid=myuid;pwd=mypwd"
    Set cn = en.OpenConnection(dsName:="",_
    Prompt:=rdDriverNoPrompt, ReadOnly:=False, _
    Connect:=cnStr)

    ' crear la secuencia SQL adecuada para una tabla de
    ' nuestra base de datos

    sql = "Select * From Titles"

    'la siguiente línea abre un resultset Dinámico
    Set rs = cn.OpenResultset(Name:=sql, _
    Type:=rdOpenDynamic, LockType:=rdConcurRowver, _
    Option:=rdAsyncEnable)

    While rs.StillExecuting

    DoEvents

    Wend

    'imprime las tres primeras columnas de la primera fila.
    Me.Print rs(0), rs(1), rs(2)

    End Sub
  4. Como vemos, es necesario que el usuario cambie en los métodos OpenConnection y OpenDatabase, a sus correspondientes DRIVER, SERVER, DATABASE, UID, y PWD. También es necesario modificar la sentencia SQL en el evento Command1_Click para que coincida con nuestra fuente SQL.
  5. Ejecute el programa o pulse F5.
PRECAUCIÓN: CUALQUIER UTILIZACIÓN POR SU PARTE DEL CÓDIGO INCLUIDO EN ESTE ARTÍCULO SE HARÁ A SU CUENTA Y RIESGO. Microsoft facilita este código "tal cual" sin garantía de ningún tipo, ya sea explícita o implícita, incluyendo expresamente en tal exención de responsabilidad y, a efectos meramente enunciativos y no limitativos, las garantías legales mercantiles implícitas y/o la adecuación a un propósito o finalidad en particular.
Propiedades

Id. de artículo: 550155 - Última revisión: 7 nov. 2003 - Revisión: 1

Comentarios