Compartilhar via


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