Eliminar filas de una tabla usando un bucle
Pregunta
¿Por qué mi Do Until
bucle intenta ejecutar raw.Delete
a pesar de raw.EOF
¿es verdad?Si tengo una mesa vacía, esto falla.¿Por qué?
Dim raw As Recordset
Set raw = db.OpenRecordset("tblSampleRaw")
If raw.RecordCount > 0 Then
raw.MoveFirst
Do Until raw.EOF
raw.MoveFirst
raw.Delete
Loop
End If
Solución
No estoy seguro, o un experto en VBA, pero ¿cómo es que usted está constantemente haciendo un MoveFirst? Su no avanzar en el conjunto de registros. Trate
Do Until raw.EOF
raw.Delete
raw.MoveNext
Loop
Otros consejos
Está realizando una operación fila por fila agonizante o RBAR (barra de refuerzo).Cuanto más grande sea la mesa, más tiempo llevará.
La mayoría de las bases de datos pueden funcionar de manera más eficiente que las RBAR.Te sugiero que pienses en términos de CONJUNTOS en lugar de filas.
Creo que deberías reemplazar todo ese bloque de código con esto:
DoCmd.RunSQL "DELETE * FROM tblSampleRaw"
para efectos de la respuesta
Dim raw As Recordset
Set raw = db.OpenRecordset("tblSampleRaw")
If raw.RecordCount > 0 Then
raw.MoveFirst
WHILE NOT raw.EOF or raw.BOF
raw.MoveFirst
raw.Delete
Loop
End If
No soy un programador de VB, pero parece que 'en bruto' se va a seguir cayendo a través del lazo, incluso después de que se ejecuta 'MoveFirst'.
¿Qué hay de Dim cruda como DAO.Recordset?