Scotch
Scotch

Reputation: 3226

VBA Delete query not being executed

I have a quirk with my Access app that I cannot debug. I have a form that essentially makes an insertion into a 'completed' table and a deletion from a 'pending' table. Design preferences aside, this is how I'm doing it rather than having some sort of 'Status' column.

I'll summarize my code with the relevent lines.

First it makes the insertion into the completed table, then the simple deletion:

    qr = "DELETE * FROM tblPendingClasses WHERE ((tblPendingClasses.ID = " & curr         & "));" 'build the query
    Debug.Print qr
    MsgBox (qr)
    dbMine.Execute qr, dbFailOnExecute

     Form.Refresh 'refresh,requery
     Form.Requery
     MsgBox ("Class review complete.")
     docmd.close

The query is built fine, from the debug statement and msgbox, but it just doesn't do anything. I look at the table for pending classes, and the class with the ID I'm trying to delete is just sitting there. No meaningful errors, nothing. This used to work, and works sometimes, but is not working at the moment.

Ideas?

Upvotes: 3

Views: 3184

Answers (1)

HansUp
HansUp

Reputation: 97101

If your module includes Option Explicit, you should get a compile error, "Variable not defined" on this line:

dbMine.Execute qr, dbFailOnExecute

Probably you intended dbFailOnError instead of dbFailOnExecute as the option for the .Execute method. Add Option Explicit to the Declarations section of your code module so the VBA compiler will alert you when you attempt to use the name of a constant which doesn't exist (dbFailOnExecute). Then compile and fix any other issues the compiler complains about.

The Database.Execute Method help topic recommends:
"... always use the dbFailOnError option when using the Execute method to run an update or delete query. This option generates a run-time error and rolls back all successful changes if any of the records affected are locked and can't be updated or deleted."

So dbFailOnExecute will give you the run-time error message which explains why the expected deletions didn't happen.

After making those changes, if you still don't get any rows deleted and no error message, make sure you don't have SetWarnings switched off.

DoCmd.SetWarnings True

Upvotes: 4

Related Questions