ADO WillExecute and ExecuteComplete Events
An event is a subroutine that can be called automatically after a
specific operation has occurred.
- The WillExecute event can be fired just before a call to
objcomm.Execute, objconn.Execute, or objrs.Open.
- The ExecuteComplete event can be fired after a call to
objcomm.Execute, objconn.Execute, objrs.Open, objrs.Requery, or
objrs.NextRecordset is completed.
Syntax
WillExecute src,cursortyp,locktyp,options,status,objcomm,objrs,objconn
ExecuteComplete recaffected,objerror,status,objcomm,objrs,objconn
|
Example: WillExecute
' Use the WithEvents
keyword to designate that events
' can be handled by this Connection object
Dim WithEvents objConn As
ADODB.Connection
' Note how the object name, objConn, is
incorporated into the event Sub name
Private Sub
objConn_WillExecute( Source
As String, _
CursorType As ADODB.CursorTypeEnum, _
LockType As ADODB.LockTypeEnum, _
Options As Long _
adStatus As ADODB.EventStatusEnum, _
ByVal pCommand As ADODB.Command , _
ByVal pRecordset As ADODB.Recordset , _
ByVal pConnection As ADODB.Connection )
' place any code you desire here, for example
If LockType = adLockReadOnly Then
Print "The Lock Type is read-only"
End If
End Sub
Example: ExecuteComplete
' Use the WithEvents
keyword to designate that events
' can be handled by this Connection object
Dim WithEvents objConn As ADODB.Connection
' Note how the object name, objConn, is incorporated
into the event Sub name
Private Sub
objConn_ExecuteComplete( RecordsAffected
As Long, _
ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, _
ByVal pCommand As ADODB.Command, _
ByVal pRecordset As ADODB.Recordset, _
ByVal pConnection As ADODB.Connection )
' place any code you desire here, for example
If adStatus = adStatusOK Then
Print "Records affected = " & RecordAffected
Else
Print "ExecuteComplete Status = " & adStatus
End If
End Sub
Parameter |
Description |
src |
A string that contains an SQL command or a
stored procedure name
|
cursortyp |
Specifies the type of cursor to be used. One of
the CursorTypeEnum values
|
locktyp |
Specifies the type of lock to be used. One of
the LockTypeEnum values
|
options |
One or more of the
CommandTypeEnum or
ExecuteOptionEnum values
|
recaffected |
The number of records affected by the execution
|
objerror |
An Error object that contains the errors that
occurred
Note: The EventStatusEnum value must be set to
adStatusErrorsOccurred to create the Error object |
status |
An EventStatusEnum
value
|
objcomm |
For WillExecute: Set to the Command
object that was executed or to Nothing
For ExecuteComplete: The Command object that was
executed |
objrs |
For WillExecute: Set to the Recordset
object that resulted from the execution of the command or to
Nothing
For ExecuteComplete: The Recordset object that is the
result of the executed command |
objconn |
The Connection object that is associated with
the execution of the command
|
CursorTypeEnum Values
Specifies the type of cursor used in a Recordset object.
Constant |
Value |
Description |
adOpenUnspecified |
-1 |
Does not specify the type of cursor. |
adOpenForwardOnly |
0 |
Default. Uses a forward-only cursor. Identical to a static
cursor, except that you can only scroll forward through records.
This improves performance when you need to make only one pass
through a Recordset. |
adOpenKeyset |
1 |
Uses a keyset cursor. Like a dynamic cursor, except that you
can't see records that other users add, although records that
other users delete are inaccessible from your Recordset. Data
changes by other users are still visible. |
adOpenDynamic |
2 |
Uses a dynamic cursor. Additions, changes, and deletions by
other users are visible, and all types of movement through the
Recordset are allowed, except for bookmarks, if the provider
doesn't support them. |
adOpenStatic |
3 |
Uses a static cursor. A static copy of a set of records that
you can use to find data or generate reports. Additions,
changes, or deletions by other users are not visible. |
LockTypeEnum Values
Constant |
Value |
Description |
adLockUnspecified |
-1 |
Does not specify a type of lock. For clones, the clone is
created with the same lock type as the original. |
adLockReadOnly |
1 |
Indicates read-only records. You cannot alter the data. |
adLockPessimistic |
2 |
Indicates pessimistic locking, record by record. The
provider does what is necessary to ensure successful editing of
the records, usually by locking records at the data source
immediately after editing. |
adLockOptimistic |
3 |
Indicates optimistic locking, record by record. The provider
uses optimistic locking, locking records only when you call the
Update method. |
adLockBatchOptimistic |
4 |
Indicates optimistic batch updates. Required for batch
update mode. |
CommandTypeEnum Values
Constant |
Value |
Description |
adCmdUnspecified |
-1 |
Does not specify the command type argument. |
adCmdText |
1 |
Evaluates CommandText as a textual definition of a command
or stored procedure call. |
adCmdTable |
2 |
Evaluates CommandText as a table name whose columns are all
returned by an internally generated SQL query. |
adCmdStoredProc |
4 |
Evaluates CommandText as a stored procedure name. |
adCmdUnknown |
8 |
Indicates that the type of command in the CommandText
property is not known. |
adCmdFile |
256 |
Evaluates CommandText as the file name of a persistently
stored Recordset. Used with Recordset.Open or Requery only. |
adCmdTableDirect |
512 |
Evaluates CommandText as a table name whose columns are all
returned. Used with Recordset.Open or Requery only. To use the
Seek method, the Recordset must be opened with adCmdTableDirect.
This value cannot be combined with the ExecuteOptionEnum value
adAsyncExecute. |
ExecuteOptionEnum Values
Constant |
Value |
Description |
adOptionUnspecified |
-1 |
Indicates that the command is unspecified. |
adAsyncExecute |
16 |
Indicates that the command should execute asynchronously.
This value cannot be combined with the CommandTypeEnum value
adCmdTableDirect. |
adAsyncFetch |
32 |
Indicates that the remaining rows after the initial quantity
specified in the CacheSize property should be retrieved
asynchronously. |
adAsyncFetchNonBlocking |
64 |
Indicates that the main thread never blocks while
retrieving. If the requested row has not been retrieved, the
current row automatically moves to the end of the file. If you
open a Recordset from a Stream containing a persistently stored
Recordset, adAsyncFetchNonBlocking will not have an effect; the
operation will be synchronous and blocking.
adAsynchFetchNonBlocking has no effect when the adCmdTableDirect
option is used to open the Recordset. |
adExecuteNoRecords |
128 |
Indicates that the command text is a command or stored
procedure that does not return rows (for example, a command that
only inserts data). If any rows are retrieved, they are
discarded and not returned. adExecuteNoRecords can only be
passed as an optional parameter to the Command or Connection
Execute method. |
adExecuteStream |
256 |
Indicates that the results of a command execution should be
returned as a stream. adExecuteStream can only be passed as an
optional parameter to the Command Execute method. |
adExecuteRecord |
512 |
Indicates that the CommandText is a command or stored
procedure that returns a single row which should be returned as
a Record object. |
EventStatusEnum Values
Constant |
Value |
Description |
adStatusOK |
1 |
The operation that fired the event was
successful |
adStatusErrorsOccurred |
2 |
The operation that fired the event failed |
adStatusCantDeny |
3 |
Cannot cancel the pending operation |
adStatusCancel |
4 |
Cancels the operation that fired the event |
adStatusUnwantedEvent |
5 |
Prevents subsequent notifications before the
event method has finished executing |
|