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
¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top