Qué son los cursores dinámicos

Id. de artículo: 550155 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E10156
Expandir todo | Contraer todo

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: viernes, 07 de noviembre de 2003 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Visual Basic 4.0 Standard Edition
Palabras clave: 
cursor vbwin rdo dinámico KB550155

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com