Método QueryDef.Execute (DAO)
Aplica-se ao: Access 2013, Office 2013
Executa uma instrução SQL no objeto especificado.
Sintaxe
expressão . Execute(Opções)
expressão uma variável que representa um objeto QueryDef.
Parâmetros
Nome |
Necessária/opcional |
Tipo de dados |
Descrição |
---|---|---|---|
Opções |
Opcional |
Variant |
Comentários
Você pode usar as seguintes constantes RecordsetOptionEnum como opções.
Constante |
Descrição |
---|---|
dbDenyWrite |
Nega a permissão de gravação para outros usuários (somente espaços de trabalho do Microsoft Access). |
dbInconsistent |
(Padrão) Executa atualizações inconsistentes (somente espaços de trabalho do Microsoft Access). |
dbConsistent |
Executa atualizações consistentes (somente espaços de trabalho do Microsoft Access). |
dbSQLPassThrough |
Executa uma consulta de passagem SQL. A configuração dessa opção passa a instrução SQL para um banco de dados ODBC para processamento (somente espaços de trabalho do Microsoft Access). |
dbFailOnError |
Reverte atualizações se ocorrer erro (somente espaços de trabalho do Microsoft Access). |
dbSeeChanges |
Gera um erro de tempo de execução caso outro usuário esteja alterando dados que você esteja editando (somente espaços de trabalho do Microsoft Access). |
dbRunAsync |
Executa a consulta de forma assíncrona (somente objetos ODBCDirect Connection e QueryDef). |
dbExecDirect |
Executa a instrução sem chamar primeiro a função SQLPrepare ODBC API (somente objetos ODBCDirect Connection e QueryDef). |
Observação
[!OBSERVAçãO] O Microsoft Access 2013 não oferece suporte para espaços de trabalho ODBCDirect. Use o ADO para acessar fontes de dados externas sem usar o mecanismo de banco de dados do Microsoft Access.
Observação
[!OBSERVAçãO] As constantes dbConsistent e dbInconsistent são mutuamente exclusivas. Você pode usar uma ou a outra, mas não ambas, em uma determinada instância de OpenRecordset. Usar dbConsistent e dbInconsistent ao mesmo tempo causa um erro.
Use a propriedade RecordsAffected do objeto Connection, Database ou QueryDef para determinar o número de registros afetados pelo método Execute mais recente. Por exemplo, RecordsAffected contém o número de registros excluídos, atualizados ou inseridos ao executar uma consulta ação. Quando você usa o método Execute para executar uma consulta, a propriedade RecordsAffected do objeto QueryDef é definida como o número de registros afetados.
Em um espaço de trabalho do Microsoft Access, se você fornecer uma instrução SQL sintaticamente correta e tiver as permissões apropriadas, o método Execute não falhará mesmo que uma única linha possa ser modificada ou excluída. Portanto, sempre use a opção dbFailOnError quando empregar o método Execute para executar uma consulta atualização ou exclusão. Essa opção gera um erro em tempo de execução e devolve todas as alterações bem-sucedidas se qualquer um dos registros afetados estiver protegido e não puder ser atualizado ou excluído.
Em versões anteriores do mecanismo de banco de dados do Microsoft Jet, instruções SQL foram automaticamente incorporadas a transações implícitas. Se parte de uma instrução executada com o dbFailOnError tiver falhado, a instrução inteira será devolvida. Para melhorar o desempenho, essas transações implícitas foram removidas a partir da versão 3.5. Se estiver atualizando código DAO antigo, considere o uso de transações explícitas envolvendo instruções Execute.
Para obter melhor desempenho em um espaço de trabalho do Microsoft Access, especialmente em um ambiente multiusuário, aninhe o método Execute em uma transação. Use o método BeginTrans no objeto Workspace atual e use o método Execute e conclua a transação usando o método CommitTrans no Workspace. Isso salva as alterações em disco e libera todas as proteções colocadas durante a execução da consulta.
Exemplo
Este Exemplo demonstra o método Execute quando executado tanto a partir de um objeto QueryDef como de um objeto Database. Os procedimentos ExecuteQueryDef e PrintOutput são exigidos para a execução deste procedimento.
Sub ExecuteX()
Dim dbsNorthwind As Database
Dim strSQLChange As String
Dim strSQLRestore As String
Dim qdfChange As QueryDef
Dim rstEmployees As Recordset
Dim errLoop As Error
' Define two SQL statements for action queries.
strSQLChange = "UPDATE Employees SET Country = " & _
"'United States' WHERE Country = 'USA'"
strSQLRestore = "UPDATE Employees SET Country = " & _
"'USA' WHERE Country = 'United States'"
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
' Create temporary QueryDef object.
Set qdfChange = dbsNorthwind.CreateQueryDef("", _
strSQLChange)
Set rstEmployees = dbsNorthwind.OpenRecordset( _
"SELECT LastName, Country FROM Employees", _
dbOpenForwardOnly)
' Print report of original data.
Debug.Print _
"Data in Employees table before executing the query"
PrintOutput rstEmployees
' Run temporary QueryDef.
ExecuteQueryDef qdfChange, rstEmployees
' Print report of new data.
Debug.Print _
"Data in Employees table after executing the query"
PrintOutput rstEmployees
' Run action query to restore data. Trap for errors,
' checking the Errors collection if necessary.
On Error GoTo Err_Execute
dbsNorthwind.Execute strSQLRestore, dbFailOnError
On Error GoTo 0
' Retrieve the current data by requerying the recordset.
rstEmployees.Requery
' Print report of restored data.
Debug.Print "Data after executing the query " & _
"to restore the original information"
PrintOutput rstEmployees
rstEmployees.Close
Exit Sub
Err_Execute:
' Notify user of any errors that result from
' executing the query.
If DBEngine.Errors.Count > 0 Then
For Each errLoop In DBEngine.Errors
MsgBox "Error number: " & errLoop.Number & vbCr & _
errLoop.Description
Next errLoop
End If
Resume Next
End Sub
Sub ExecuteQueryDef(qdfTemp As QueryDef, _
rstTemp As Recordset)
Dim errLoop As Error
' Run the specified QueryDef object. Trap for errors,
' checking the Errors collection if necessary.
On Error GoTo Err_Execute
qdfTemp.Execute dbFailOnError
On Error GoTo 0
' Retrieve the current data by requerying the recordset.
rstTemp.Requery
Exit Sub
Err_Execute:
' Notify user of any errors that result from
' executing the query.
If DBEngine.Errors.Count > 0 Then
For Each errLoop In DBEngine.Errors
MsgBox "Error number: " & errLoop.Number & vbCr & _
errLoop.Description
Next errLoop
End If
Resume Next
End Sub
Sub PrintOutput(rstTemp As Recordset)
' Enumerate Recordset.
Do While Not rstTemp.EOF
Debug.Print " " & rstTemp!LastName & _
", " & rstTemp!Country
rstTemp.MoveNext
Loop
End Sub
O exemplo a seguir mostra como executar uma consulta parâmetro. A coleção de Parâmetros é usada para configurar o parâmetro de Organização da consulta myActionQuery antes da execução da consulta.
Código de exemplo fornecido por: a Referência do programador do Microsoft Access 2010.
Public Sub ExecParameterQuery()
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("myActionQuery")
'Set the value of the QueryDef's parameter
qdf.Parameters("Organization").Value = "Microsoft"
'Execute the query
qdf.Execute dbFailOnError
'Clean up
qdf.Close
Set qdf = Nothing
Set dbs = Nothing
End Sub