lunes, 31 de mayo de 2010

TEMA 4: Propiedades ADO

AbsolutePage, propiedad (ADO)
Especifica en qué página reside el registro actual.
Se aplica a Objeto Recordset (ADO).
Configuración y valores devueltos
Establece o devuelve un valor de tipo Long entre 1 y el número Recordset (PageCount) o devuelve una de las constantes siguientes:
adPosUnknown El objeto Recordset está vacío, la posición actual se desconoce o el proveedor no admite la propiedad AbsoltitePage.
adPosBOF El puntero del registro actual está al comienzo del archivo (C5 decir, la propiedad BOF tiene el valor True).
adPosEOF El puntero del registro actual está al final del archivo (es decir, la propiedad EOF tiene el valor True).
Utilice la propiedad AbsolutePage para identificar el número de la página en que se encuentra el registro actual. Utilice la propiedad PageSize para dividir lógicamente el objeto Recordset en varias páginas, cada una de las cuales debe tener un número de registros igual a PageSize (excepto la última página, que puede tener menos registros). El proveedor debe ser compatible con la funcionalidad apropiada para que esta propiedad esté disponible. Al igual que la propiedad AbsolutePosition, la propiedad AbsolutePage está en base 1 v es igual a 1 cuando el registro actual es el primer registro del objeto Recordset. Establezca esta propiedad para moverse al primer registro de una página específica. Obtenga el número total de páginas a partir de la propiedad PageCount.

AbsolutePosition, propiedad (ADO)
Especifica la posición ordinal del registro actual de un objeto Recordset.
Se aplica a
Objeto Recordset (ADO).
Configuración y valores devueltos
Establece o devuelve un valor de tipo Long entre 1 y el número de registros del objeto Recordset (RecordCount) o devuelve una de las constantes siguientes: Constante Descripción
adPosUnknown El objeto Recordset está vacío, la posición actual se desconoce o el proveedor no admite la propiedad AbsoltitePage.
adPosBOF El puntero del registro actual está al comienzo del archivo (C5 decir, la propiedad BOF tiene el valor True).
adPosEOF El puntero del registro actual está al final del archivo (es decir, la propiedad EOF tiene el valor True).
Utilice la propiedad AbsolutePosition para moverse a un registro según su posición ordinal en el objeto Recordset o para determinar la posición ordinal del registro actual. El proveedor debe ser compatible con la funcionalidad apropiada para que esta propiedad esté disponible. Al igual que la propiedad AbsolutePage, la propiedad AbsolutePosition está en base 1 y es igual a 1 cuando el registro actual es el púrner registro del objeto Recordset. Puede obtener el número total de registros contenidos en dicho objeto Recordset a partir de la propiedad RecordCount. Cuando establece la propiedad AbsoiutePos¡tion, incluso si es para un registro contenido en la memoria caché actual, ADO vuelve a cargar la memoria caché con un nuevo grupo de registros que comienza con el registro especificado. La propiedad CacheSize determina el tamaño de este grupo.
Nota: No debería utilizar la propiedad AbsolutePosition como un número de registro sustirntorio. La posición de un registro dado cambia cuando se elimina un registro anterior Tampoco hay ninguna seguridad de que un registro dado tendrá la misma propiedad AbsolutePosition si se vuelve a consultar o se vuelve a abrir el objeto Recordset. Los marcadores siguen siendo la forma recomendada para conservar y volver a una posición dada, v son la única manera de posicionamiento en todos los tipos de objetos Recordset.
Ejemplo
Este ejemplo muestra cómo la propiedad AbsolutePosition puede llevar cuenta del progreso de un bucle que enumera todos los registros de un Recordset. Utiliza la propiedad CursorLocation para habilitar la propiedad AbsolutePosition ajustando el cursor a un cursor de cliente:
Public Sub AbsolutePositionX()

   Dim rstEmployees As ADODB.Recordset
   Dim strCnn As String
   Dim strMessage As String

   ' Open a recordset for the Employee table
   ' using a client cursor.
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
   Set rstEmployees = New ADODB.Recordset
   ' Use client cursor to enable AbsolutePosition property.
   rstEmployees.CursorLocation = adUseClient
   rstEmployees.Open "employee", strCnn, , , adCmdTable
   
   ' Enumerate Recordset.
   Do While Not rstEmployees.EOF
      ' Display current record information.
      strMessage = "Employee: " & rstEmployees!lName & vbCr & _
         "(record " & rstEmployees.AbsolutePosition & _
         " of " & rstEmployees.RecordCount & ")"
      If MsgBox(strMessage, vbOKCancel) = vbCancel _
         Then Exit Do
      rstEmployees.MoveNext
   Loop

   rstEmployees.Close

End Sub

BOF, EOF, propiedades (ADO)
BOF indica que la posición del registro actual está antes del primer registro de un objeto Recordset EOF indica que la posición del registro actual esta después del último registro de un objeto Recordset.
Valor devuelto
Las propiedades BOF y EOF devuelven valores Boolean.
Se aplica a  Objeto Recordset ADO.
Utilice las propiedades BOF y BOF para determinar si un objeto Recordset contiene registros o si se han sobrepasado los límites de un objeto Recordset al moverse de un registro a otro.
La propiedad BOF devuelve True (-1) si la posición del registro actual está antes del primer registro, y devuelve False (O) si la posición del retristro actual esta en o después del primer registro.
La propiedad EOF devuelve True si la posición del registro actual está después del último registro, y devuelve False si la posición del registro actual está en o después del último registro.
Si una de las dos propiedades BOF o EOF es true. no hay ningún registro actual.
Si se abre un objeto Recordset que no contiene registros las propiedades BOF y EOF se establecen a True y el valor de la propiedad RecordCount del objeto Recordset es cero.
Cuando se abre un objeto Recordset que contiene. al menos. un registro. el primer registro es el registro actual y las propiedades BOF y BOF tienen el valor False.
Si se elimina el último registro que queda en el objeto Recordset, las propiedades BOF y EOF pueden conservar el valor False hasta que se intente volver a colocar el registro actual.
Esta tabla muestra qué métodos Move se permiten con diferentes combinaciones de las propiedades BOF y EOF:
MoveFirst,
MoveLast
MovePrevious,
Move
Move O MoveNext,
Move>O
BOF=True,EOF=False Permitido Error Error Permitido
BOF=False,EOF=True Permitido Permitido Error Error
Ambas True Error Error Error Error
Ambas False Permitido Permitido Permitido Permitido
Permitir un método Move no garantiza que el método localizará correctamente un registro, sólo significa que al llamar al método Move especificado no se producirá un error. La tabla siguiente muestra qué ocurre en los valores de las propiedades BOF y EOF cuando se llama a varios métodos Move, pero no puede localizar correctamente un registro:
BOF EOF
MoveFirst, MoveLast Se establece a True. Se establece a True.
Move O Ningún cambio Ningún cambio
MovePrevious, Move Se establece a True. Ningún cambio
MoveNext, Move > O Ningún cambio Se establece a True.
E¡emplo
Este ejemplo utiliza las propiedades BOF y EOF para visualizar un mensaje si un usuario intenta desplazarse más allá del primer o último registro de un Recordset. Utiliza la propiedad Bookmark para permitir al usuario etiquetar un registro en un Recordset y volver a él más tarde:
Public Sub BOFX()

   Dim rstPublishers As ADODB.Recordset
   Dim strCnn As String
   Dim strMessage As String
   Dim intCommand As Integer
   Dim varBookmark As Variant

   ' Open recordset with data from Publishers table.
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
   Set rstPublishers = New ADODB.Recordset
   rstPublishers.CursorType = adOpenStatic
   ' Use client cursor to enable AbsolutePosition property.
   rstPublishers.CursorLocation = adUseClient
   rstPublishers.Open "SELECT pub_id, pub_name FROM publishers " & _
      "ORDER BY pub_name", strCnn, , , adCmdText

   rstPublishers.MoveFirst

   Do While True
      ' Display information about current record
      ' and get user input.
      strMessage = "Publisher: " & rstPublishers!pub_name & _
         vbCr & "(record " & rstPublishers.AbsolutePosition & _
         " of " & rstPublishers.RecordCount & ")" & vbCr & vbCr & _
         "Enter command:" & vbCr & _
         "[1 - next / 2 - previous /" & vbCr & _
         "3 - set bookmark / 4 - go to bookmark]"
      intCommand = Val(InputBox(strMessage))

      Select Case intCommand
         ' Move forward or backward, trapping for BOF
         ' or EOF.
         Case 1
            rstPublishers.MoveNext
            If rstPublishers.EOF Then
               MsgBox "Moving past the last record." & _
                  vbCr & "Try again."
               rstPublishers.MoveLast
            End If
         Case 2
            rstPublishers.MovePrevious
            If rstPublishers.BOF Then
               MsgBox "Moving past the first record." & _
                  vbCr & "Try again."
               rstPublishers.MoveFirst
            End If

         ' Store the bookmark of the current record.
         Case 3
            varBookmark = rstPublishers.Bookmark

         ' Go to the record indicated by the stored
         ' bookmark.
         Case 4
            If IsEmpty(varBookmark) Then
               MsgBox "No Bookmark set!"
            Else
               rstPublishers.Bookmark = varBookmark
            End If

         Case Else
            Exit Do
      End Select

   Loop

   rstPublishers.Close

End Sub
Este ejemplo utiliza las propiedades Bookmark y Filter para crear una vista limitada del Recordset. Sólo son accesibles los registros referenciados por la matriz de marcadores:
Public Sub BOFX2()

Dim rs As New ADODB.Recordset
Dim bmk(10)

rs.CursorLocation = adUseClient
rs.ActiveConnection = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=;" 

rs.Open "select * from authors", , adOpenStatic, adLockBatchOptimistic
Debug.Print "Number of records before filtering: ", rs.RecordCount

ii = 0
While rs.EOF <> True And ii < 11
    bmk(ii) = rs.Bookmark
    ii = ii + 1
    rs.Move 2
Wend
rs.Filter = bmk
Debug.Print "Number of records after filtering: ", rs.RecordCount

rs.MoveFirst
While rs.EOF <> True
    Debug.Print rs.AbsolutePosition, rs("au_lname")
    rs.MoveNext
Wend
    
End Sub

CommandTimeout, propiedad (ADO) Descripción
Indica el intervalo de espera para que se ejecute un comando antes de que finalice el intento y se genere un error.
Se aplica a
Objeto Command (ADO), Objeto Connection (ADO).
Configuración y valores devueltos
Establece o devuelve un valor Long que indica, en segundos, el intervalo de espera para que se ejecute un comando. El valor predeterminado es 30.
Comentarios
Use la propiedad CommandTimeout en un objeto Connection o en un objeto Command para permitir la cancelación de una llamada al método Execute, debida a demoras en el tráfico de la red o a una sobrecarga en el servidor. Si transcurre el intervalo establecido en la propiedad CommandTimeout antes de que termine la ejecución de la orden, se produce un error y ADO cancela el comando. Si establece la propiedad a cero, ADO esperará indefinidamente hasta que termine la ejecución. Compruebe que el proveedor y el origen de datos para los que está escribiendo código admiten la funcionalidad CommandTimeout. El valor de CommandTimieout en un objeto Connection no afecta al valor de CommandTimeout en un objeto Command de la misma Connection,. es decir, la propiedad CommandTimeout del objeto Command no hereda el valor de CommandTimeout del objeto Connection. En un objeto Connection, la propiedad CommandTimeout permanece en modo lectura/escritura después de que se abra Connection.

ConnectionString, propiedad (ADO)
Contiene la información que se utiliza para establecer una conexión a un origen de datos.
Se aplica a
Objeto Connection (ADO).
Configuración y valores devueltos
Establece o devuelve un valor String.
Use la propiedad ConnectionString para especificar un origen de datos pasando una cadena de conexión detallada que contenga una serie de instrucciones argumento = valor separadas con punto y coma.
ADO admite cuatro argumentos con la propiedad ConnectionString; cualquier otro argumento pasa directamente al proveedor sin que ADO lo procese. Los argumentos compatibles con ADO son los siguientes:
Argumento Descripción
Provider= Especifica el nombre del proveedor que se usa con la conexion
File Name= Indica el nombre de un archivo especifico del proveedor (por Qíempío, un objeto de origen de datos persistente) que contiene información sobre la conexión preestablecida.
Remote provider= Especifica el nombre de un proveedor que se usa al abrir una conexión del lado del cliente (solamente con Remote Data Service).
Remote Server= Especifica la ruta de acceso del servidor que se usa al abrir una conexión del lado del cliente (solamente con Remote Data Service).
Argumento Descripción Provider Especifica el nombre del proveedor que se usa con la conexion. Indica el nombre de un archivo especifico del proveedor (por Qíempío, un objeto de origen de datos persistente) que contiene información sobre la conexión preestablecida. File Name Remote provider
Especifica el nombre de un proveedor que se usa al abrir una conexión del lado del cliente (solamente con Remote Data Service).
Remote Server Especifica la ruta de acceso del servidor que se usa al abrir una conexión del lado del cliente (solamente con Remote Data Service).
Después de que se establezca la propiedad ConnectionString y se abra el objeto Connection. es posible que el proveedor modifique el contenido de la propiedad: por ejemplo, asignando los nombres de argumento definidos con ADO a sus equivalentes en el proveedor. La propiedad ConnectionString hereda automáticamente el valor que se utiliza con el argumento Connections del método Open para que se pueda hacer caso omiso de la propiedad connectionString actual durante la llamada al método Open. Debido a que el argumento File Name hace que ADO cargue el proveedor asociado. no se pueden pasar ambos argumentos, Provider y File Name. La propiedad ConnectionString es de lectura/escútura cuando la conexión está cerrada y de sólo lectura cuando está abierta.
Uso de Remote Data Service. Cuando se usa el objeto Connection del lado del cliente, la propiedad ConnectionString solamente puede incluir los parámetros Remote provider y Remote Server
Count, propiedad (ADO)
Indica el número de objetos de una coleccion.
Devuelve un valor Long.
Se aplica a
Colección Errors (ADO). Colección Fields (ADO) Colección Parameter (ADO). Colección Properties (ADO).
Use la propiedad Count para determinar cuántos objetos hay en una colección dada. Debido a que la numeración de miembros de una colección empieza por cero, debe codificar siempre los bucles empezando siempre con el miembro cero y terminando con el valor de la propiedad Count menos 1. Si está usando Microsoft Visual Basic y desea hacer un recorrido por los miembros de una colección sin comprobar la propiedad Count use el comando For Each...Next. Si la propiedad Count es cero. no hay ningún objeto en la colección.

CursorLocation, propiedad (ADO) Descripción
Establece o devuelve la posición de un motor de cursores.
Se aplica a
Objeto Connection (ADO), Objeto Recordset (ADO).
Establece o devuelve un valor Long que se puede establecer a alguna de las siguientes constantes:
Constante Descripción
adUseNone No se usan servicios de cursor. (Esta constante es obsoleta y aparece únicamente por compatibilidad con versiones anteriores.)
adUseClient Usa cursores del lado del cliente suministrados por una biblioteca de cursores locales. Los motores de cursores locales admitirán a menudo muchas características que los cursores proporcionados por controladores no admitirán; por tanto, el uso de esta configuración puede proporcionar una ventaja con respecto a características que serán habilitadas. Por compatibilidad con versiones anteriores. se admite también el sinónimo adUseClientBatch.
adUseServer Predeterminado. Usa cursores suministrados por el controlador o por el proveedor de datos. Estos cursores son, en ocasiones. muy flexibles y conceden un margen de sensibilidad adicional a los cambios realizados por otros usuarios en el origen de datos. No obstante. algunas características de Microsoft Client Cursor Provider (como los conjuntos de registros disociados) no pueden ser simuladas con cursores del lado del servidor y no estarán disponibles con esta configuración.
Esta propiedad le permite elegir entre distintas bibliotecas de cursores accesibles para el proveedor. Normalmente, puede elegir entre usar una biblioteca de cursores del lado del cliente o una ubicada en el servidor.
El valor de esta propiedad afecta solamente a las conexiones establecidas después de que se haya establecido la propiedad. Los cambios en la propiedad CursorLocation no afectan a las conexiones existentes. Esta propiedad es de lectura/escritura en un Connection o Recordset cerrado, y de sólo lectura en un Recordset abierto. Los cursores de Connection.Execute heredarán esta configuración. Los objetos Recordset heredarán automáticamente esta configuración de sus conexiones asociadas.
Uso de Remote Data Service. Cuando se usa en un objeto Recordset o Connection (ADOR) del lado del cliente, la propiedad CursorLocation sólo se puede establecer a adUseClient:

Direction, propiedad (ADO)
Indica si Parameter representa un parámetro de entrada, un parámetro de salida o ambos bien, si el parámetro es el valor devuelto por un procedimiento almacenado. Se aplica a
Objeto Parameter (ADO).
Establece o devuelve uno de los siguientes valores de ParameterDirectionEnum:
Constante Descripción
adParamUnknown Indica que la dirección del parámetro es desconocida.
adParamlnput Valor predeterminado. Indica un parámetro de entrada.
adParamOutput Indica un parámetro de salida.
adParamlnputOutput Indica un parámetro de entrada y otro de salida.
adParamReturnValue Indica un valor devuelto.
Utilice la propiedad Direction para especificar cómo se pasa un parámetro hacia o desde un procedimiento. La propiedad Direction es de lectura/escritura; esto le permite trabajar con proveedores que no devuelven esta información o establecer esta información cuando desea que ADO realice una llamada adicional al proveedor para recuperar información acerca del parámetro. No todos los proveedores pueden determinar la dirección de los parámetros en sus procedimientos almacenados. En estos casos, debe establecer la propiedad Direction antes Ejecutar la consulta.
Ejemplo
Este ejemplo utiliza las propiedades ActiveConnection, CommandText, CommandTimeout, CommandType. Size y Direction para ejecutar un procedimiento almacenado:
Public Sub ActiveConnectionX()

   Dim cnn1 As ADODB.Connection
   Dim cmdByRoyalty As ADODB.Command
   Dim prmByRoyalty As ADODB.Parameter
   Dim rstByRoyalty As ADODB.Recordset
   Dim rstAuthors As ADODB.Recordset
   Dim intRoyalty As Integer
   Dim strAuthorID As String
   Dim strCnn As String

   ' Define a command object for a stored procedure.
   Set cnn1 = New ADODB.Connection
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
   cnn1.Open strCnn
   Set cmdByRoyalty = New ADODB.Command
   Set cmdByRoyalty.ActiveConnection = cnn1
   cmdByRoyalty.CommandText = "byroyalty"
   cmdByRoyalty.CommandType = adCmdStoredProc
   cmdByRoyalty.CommandTimeout = 15
      
   ' Define the stored procedure's input parameter.
   intRoyalty = Trim(InputBox( _
      "Enter royalty:"))
   Set prmByRoyalty = New ADODB.Parameter
   prmByRoyalty.Type = adInteger
   prmByRoyalty.Size = 3
   prmByRoyalty.Direction = adParamInput
   prmByRoyalty.Value = intRoyalty
   cmdByRoyalty.Parameters.Append prmByRoyalty
  
   ' Create a recordset by executing the command.
   Set rstByRoyalty = cmdByRoyalty.Execute()
      
   ' Open the Authors table to get author names for display.
   Set rstAuthors = New ADODB.Recordset
   rstAuthors.Open "authors", strCnn, , , adCmdTable
   
   ' Print current data in the recordset, adding
   ' author names from Authors table.
   Debug.Print "Authors with " & intRoyalty & _
      " percent royalty"
   Do While Not rstByRoyalty.EOF
      strAuthorID = rstByRoyalty!au_id
      Debug.Print , rstByRoyalty!au_id & ", ";
      rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
      Debug.Print rstAuthors!au_fname & " " & _
         rstAuthors!au_lname
      rstByRoyalty.MoveNext
   Loop

   rstByRoyalty.Close
   rstAuthors.Close
   cnn1.Close
   
End Sub

PageCount, propiedad (ADO)
Indica cuántas páginas de datos contiene el objeto Recordset.
Se aplica a
Objeto Recordset (ADO).
Devuelve un valor de tipo Long.
Utilice la propiedad PageCount para determinar cuántas páginas de datos hay en el objeto Recordset. Las páginas son grupos de registros cuyo tamaño es igual al valor de la propiedad PageSize. Incluso si la última página no está completa, debido a que hay menos regístros que el valor de la propiedad PageSize, se cuenta como una página adicional en el valor de PageCount.
Si el objeto Recordset no admite esta propiedad, el valor será -l para indicar que no se puede determinar el valor de PageCount. Vea las propiedades PageSize y AbsolutePage para obtener más información acerca de la funcionalidad de las páginas.
Ejemplo
Este ejemplo utiliza las propiedades AbsolutePage, PageCount y PageSize para visualizar nombres y tomar fechas de la tabla Empleado cinco registros cada vez:
Public Sub AbsolutePageX()
   
   Dim rstEmployees As ADODB.Recordset
   Dim strCnn As String
   Dim strMessage As String
   Dim intPage As Integer
   Dim intPageCount As Integer
   Dim intRecord As Integer

   ' Open a recordset using a client cursor
   ' for the employee table.
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
   Set rstEmployees = New ADODB.Recordset
   ' Use client cursor to enable AbsolutePosition property.
   rstEmployees.CursorLocation = adUseClient
   rstEmployees.Open "employee", strCnn, , , adCmdTable
   
   ' Display names and hire dates, five records
   ' at a time.
   rstEmployees.PageSize = 5
   intPageCount = rstEmployees.PageCount
   For intPage = 1 To intPageCount
      rstEmployees.AbsolutePage = intPage
      strMessage = ""
      For intRecord = 1 To rstEmployees.PageSize
         strMessage = strMessage & _
            rstEmployees!fname & " " & _ 
            rstEmployees!lname & " " & _ 
            rstEmployees!hire_date & vbCr
         rstEmployees.MoveNext
         If rstEmployees.EOF Then Exit For
      Next intRecord
      MsgBox strMessage
   Next intPage
   rstEmployees.Close

End Sub

PageSize, propiedad (ADO)
Indica cuántos registros constituyen una página en el objeto Recordset.
Se aplica a
Objeto Recordset (ADO).
Establece o devuelve un valor de tipo Long que indica cuántos registros hay en una página. El valor predeterminado es 10.
Utilice la propiedad PageSize para determinar cuántos registros componen una página lógica de datos. Al establecer un tamaño de página, puede utilizar la propiedad AbsolutePage para moverse al primer registro de una página específica. Esto es útil en las situaciones de servidor Web cuando se desea permitir que el usuario pase páginas de datos y vea cierto número de registros al mismo tiempo. Esta propiedad se puede establecer en cualquier momento y su valor se utilizará para calcular la ubicación del primer registro de una página específica.

RecordCount, propiedad (ADO)
Indica el número actual de registros de un objeto Recordset.
Se aplica a
Objeto Recordset (ADO).
Devuelve un valor de tipo Long.
Utilice la propiedad RecordCount para averiguar cuántos registros hay en un objeto Recordset. La propiedad devuelve -1 cuando ADO no puede determinar el número de registros. Al leer la propiedad RecordCount de un objeto Recordset cerrado, se produce un error. Si el objeto Recordset admite el posicionamiento aproximado o los marcadores, es decir, si las propiedades Supports (adApproxPosition) o Supports (adBookmark), respectivamente, devuelven True, este valor será el número exacto de registros del objeto Recordset independientemente de si se ha llenado completamente. Si el objeto Recordset no admite el posicionamiento aproximado, esta propiedad puede consumir muchos recursos debido a que será necesario recuperar y contar todos los recursos para devolver un valor preciso de RecordCount.
Ejemplo
Este ejemplo utiliza la propiedad Filter para abrir un Recordset nuevo basado en una condición específica aplicada a un Recordset existente. Utiliza la propiedad RecordCount para mostrar el número de registros en los dos Recordsets. Es necesaria la función FilterField para que funcione este procedimiento:
Public Sub FilterX()

   Dim rstPublishers As ADODB.Recordset
   Dim rstPublishersCountry As ADODB.Recordset
   Dim strCnn As String
   Dim intPublisherCount As Integer
   Dim strCountry As String
   Dim strMessage As String

   ' Open recordset with data from Publishers table.
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
   Set rstPublishers = New ADODB.Recordset
   rstPublishers.CursorType = adOpenStatic
   rstPublishers.Open "publishers", strCnn, , , adCmdTable

   ' Populate the Recordset.
   intPublisherCount = rstPublishers.RecordCount

   ' Get user input.
   strCountry = Trim(InputBox( _
      "Enter a country to filter on:"))

   If strCountry <> "" Then
      ' Open a filtered Recordset object.
      Set rstPublishersCountry = _
         FilterField(rstPublishers, "Country", strCountry)

      If rstPublishersCountry.RecordCount = 0 Then
         MsgBox "No publishers from that country."
      Else
         ' Print number of records for the original
         ' Recordset object and the filtered Recordset
         ' object.
         strMessage = "Orders in original recordset: " & _
            vbCr & intPublisherCount & vbCr & _
            "Orders in filtered recordset (Country = '" & _
            strCountry & "'): " & vbCr & _
            rstPublishersCountry.RecordCount
         MsgBox strMessage
      End If
      rstPublishersCountry.Close

   End If

End Sub

Public Function FilterField(rstTemp As ADODB.Recordset, _
   strField As String, strFilter As String) As ADODB.Recordset

   ' Set a filter on the specified Recordset object and then
   ' open a new Recordset object.
   rstTemp.Filter = strField & " = '" & strFilter & "'"
   Set FilterField = rstTemp

End Function
Nota: Cuando sabe los datos que desea seleccionar, suele ser más eficiente abrir un Recordset con una sentencia SQL. Este ejemplo muestra cómo puede crear un único Recordset y obtener registros de un país en particular.
Public Sub FilterX2()

   Dim rstPublishers As ADODB.Recordset
   Dim strCnn As String

   ' Open recordset with data from Publishers table.
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
   Set rstPublishers = New ADODB.Recordset
   rstPublishers.CursorType = adOpenStatic
   rstPublishers.Open "SELECT * FROM publishers " & _
      "WHERE Country = 'USA'", strCnn, , , adCmdText
      
   ' Print current data in recordset.
   rstPublishers.MoveFirst
   Do While Not rstPublishers.EOF
      Debug.Print rstPublishers!pub_name & ", " & _
         rstPublishers!country
      rstPublishers.MoveNext
   Loop

   rstPublishers.Close

End Sub
 
Sort, propiedad (ADO)
Especifica uno o más nombres de campos por los que se ordena el objeto Recordset y si cada campo se ordena de forma ascendente o descendente.
Configuración y valores devueltos
Establece o devuelve un valor de tipo String con los nombres de los campos utilizados para ordenar separados por comas, donde cada nombre es un objeto Field del objeto Recordset Y, opcionalmente, está seguido de un espacio en blanco y de la palabra clave ASCENDING o DESCENDING, que especifica el orden del campo.
Los datos no se vuelven a ordenar físicamente, sino que, simplemente, se tiene acceso a los mismos en el orden indicado. Se creará un índice temporal para cada uno de los campos especificados en la propiedad Sort si la propiedad CursorLocation se establece a adUseClient y no existe ya un índice. Al establecer la propiedad Sort a una cadena vacía. se restablecen las filas a su orden original y se eliminan los índices temporales. Los índices existentes no se eliminarán.

No hay comentarios:

Publicar un comentario