Realizar cambios masivos en un objeto Recordset de DAO

Después de crear un objeto Recordset de tipo table o dynaset, puede cambiar, eliminar o agregar nuevos registros. Sin embargo, no podrá cambiar, eliminar o agregar registros en un objeto Recordset de tipo Snapshot o de sólo avance.

Muchos de los cambios que se pueden efectuar en un bucle se pueden llevar a cabo de forma más eficiente con una consulta de actualización o de eliminación utilizando SQL. En el ejemplo siguiente se crea un objeto QueryDef para actualizar la tabla Employees y, a continuación, se ejecuta la consulta.

Dim dbsNorthwind As DAO.Database 
Dim qdfChangeTitles As DAO.QueryDef 
 
   Set dbsNorthwind = CurrentDb 
   Set qdfChangeTitles = dbsNorthwind.CreateQueryDef("") 
 
   qdfChangeTitles.SQL = "UPDATE Employees SET Title = " & _ 
                         "'Account Executive' WHERE Title = " & _ 
                         "'Sales Representative'" 
 
   ' Invoke query. 
   qdfChangeTitles.Execute dbFailOnError 

En este ejemplo, es posible reemplazar la cadena SQL entera por una consulta de parámetros guardada, en cuyo caso el procedimiento solicitará al usuario los valores de los parámetros. En el ejemplo siguiente se muestra cómo se puede reescribir el ejemplo anterior como una consulta de parámetros almacenados.

Dim dbsNorthwind As DAO.Database 
Dim qdfChangeTitles As DAO.QueryDef 
Dim strSQLUpdate As String 
Dim strOld As String 
Dim strNew As String 
 
   Set dbsNorthwind = CurrentDb 
 
   strSQLUpdate = "PARAMETERS [Old Title] Text, [New Title] Text; " & _ 
                  "UPDATE Employees SET Title = [New Title] WHERE " & _ 
                  "Title = [Old Title]" 
 
   ' Create the unstored QueryDef object. 
   Set qdfChangeTitles = dbsNorthwind.CreateQueryDef("", strSQLUpdate) 
 
   ' Prompt for old title. 
   strOld = InputBox("Enter old job title:") 
 
   ' Prompt for new title. 
   strNew = InputBox("Enter new job title:") 
 
   ' Set parameters. 
   qdfChangeTitles.Parameters("Old Title") = strOld 
   qdfChangeTitles.Parameters("New Title") = strNew 
 
   ' Invoke query. 
   qdfChangeTitles.Execute 

Nota

Una consulta de eliminación es mucho más eficiente que el código que recorre un objeto Recordset, modificando o eliminando los registros de uno en uno.

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.