Compartilhar via


Método Database.Execute (DAO)

Aplica-se ao: Access 2013, Office 2013

Executa uma consulta de ação ou executa uma instrução SQL no objeto especificado.

Sintaxe

expressão . Execute(Consulta, Opções)

expressão Uma variável que representa um objeto do Banco de dados.

Parâmetros

Nome

Necessária/opcional

Tipo de dados

Descrição

Query

Obrigatório

String

Opções

Opcional

Variant

Comentários

Você pode usar as seguintes constantes RecordsetOptionEnum para options.

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

Não reverterá as atualizações se ocorrer um erro (somente workspaces 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.

O método Execute é válido apenas para consultas ação. Se você usar Execute com outro tipo de consulta, ocorrerá um erro. Como uma consulta ação não retorna registros, Execute não retorna um Recordset. (A execução de uma consulta passagem SQL em um espaço de trabalho ODBCDirect não retornará um erro se um Recordset for retornado.)

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 Espaço de Trabalho atual, então use o método Execute e conclua a transação usando o método CommitTrans no Espaço de Trabalho. Isso salva alterações no disco e libera qualquer bloqueio gerado 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