Compartilhar via


Método Database.CreateQueryDef (DAO)

Aplica-se ao: Access 2013, Office 2013

Crie um novo objeto QueryDef.

Sintaxe

expressão . CreateQueryDef(Name, SQLText)

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

Parâmetros

Nome

Necessária/opcional

Tipo de dados

Descrição

Name

Opcional

Variant

Um Variant (String subtype) que exclusivamente nomeia a nova QueryDef.

SQLText

Opcional

Variant

Um Variant (String subtype) que é uma instrução SQL definindo o QueryDef. Se você omitir esse argumento, será possível definir o QueryDef configurando sua propriedade SQL antes ou depois de acrescentá-lo a uma coleção.

Valor de retorno

QueryDef

Comentários

Em um espaço de trabalho do Microsoft Access, se você fornecer algo diferente de uma cadeia de caracteres de comprimento zero para o nome ao criar um QueryDef, o objeto QueryDef resultante será automaticamente acrescentado à coleção QueryDefs.

Se o objeto especificado por name já for um membro da coleção QueryDefs, ocorrerá um erro de tempo de execução. Você pode criar um QueryDef temporário usando uma cadeia de caracteres de comprimento zero para o argumento name quando executar o método CreateQueryDef. Também é possível realizar isso configurando a propriedade Name de um QueryDef recém-criado como uma cadeia de caracteres de comprimento zero ("").

Objetos QueryDef temporários são úteis se você desejar usar repetidamente instruções SQL dinâmicas sem ter de criar novos objetos permanentes na coleção QueryDefs. Não é possível acrescentar um QueryDef temporário a qualquer coleção porque uma cadeia de caracteres de comprimento zero não é um nome válido para um objeto QueryDef permanente. Sempre é possível definir as propriedades Name e SQL do objeto QueryDef recém-criado e subsequentemente acrescentar o QueryDef à coleção QueryDefs.

Para executar a instrução SQL em um objeto QueryDef, use o método Execute ou OpenRecordset.

Usar um objeto QueryDef é a maneira preferencial de executar consultas passagem SQL com bancos de dados ODBC.

Para remover um objeto QueryDef de uma coleção QueryDefs em um banco de dados de mecanismo de banco de dados Microsoft Access, use o método Delete na coleção.

Exemplo

Este exemplo usa o método CreateQueryDef para criar e executar um QueryDef temporário e um permanente. A função GetrstTemp é exigida para a execução deste procedimento.

    Sub CreateQueryDefX() 
     
       Dim dbsNorthwind As Database 
       Dim qdfTemp As QueryDef 
       Dim qdfNew As QueryDef 
     
       Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     
       With dbsNorthwind 
          ' Create temporary QueryDef. 
          Set qdfTemp = .CreateQueryDef("", _ 
             "SELECT * FROM Employees") 
          ' Open Recordset and print report. 
          GetrstTemp qdfTemp 
          ' Create permanent QueryDef. 
          Set qdfNew = .CreateQueryDef("NewQueryDef", _ 
             "SELECT * FROM Categories") 
          ' Open Recordset and print report. 
          GetrstTemp qdfNew 
          ' Delete new QueryDef because this is a demonstration. 
          .QueryDefs.Delete qdfNew.Name 
          .Close 
       End With 
     
    End Sub 
     
    Function GetrstTemp(qdfTemp As QueryDef) 
     
       Dim rstTemp As Recordset 
     
       With qdfTemp 
          Debug.Print .Name 
          Debug.Print "  " & .SQL 
          ' Open Recordset from QueryDef. 
          Set rstTemp = .OpenRecordset(dbOpenSnapshot) 
     
          With rstTemp 
             ' Populate Recordset and print number of records. 
             .MoveLast 
             Debug.Print "  Number of records = " & _ 
                .RecordCount 
             Debug.Print 
             .Close 
          End With 
     
       End With 
     
    End Function 

Este exemplo usa os métodos CreateQueryDef e OpenRecordset e a propriedade SQL para consultar a tabela de títulos no banco de dados de exemplo Pubs do Microsoft SQL Server e retornar o título e o identificador de título do livro mais vendido. Em seguida, o exemplo consulta a tabela de autores e instrui o usuário a enviar um cheque de bonificação para cada autor com base na sua participação nos direitos autorais (o total do prêmio é de $ 1.000 e cada autor receberá uma porcentagem dessa quantia).

Sub ClientServerX2() 
 
   Dim dbsCurrent As Database 
   Dim qdfBestSellers As QueryDef 
   Dim qdfBonusEarners As QueryDef 
   Dim rstTopSeller As Recordset 
   Dim rstBonusRecipients As Recordset 
   Dim strAuthorList As String 
 
   ' Open a database from which QueryDef objects can be  
   ' created. 
   Set dbsCurrent = OpenDatabase("DB1.mdb") 
 
   ' Create a temporary QueryDef object to retrieve 
   ' data from a Microsoft SQL Server database. 
   Set qdfBestSellers = dbsCurrent.CreateQueryDef("") 
   With qdfBestSellers 
      ' Note: The DSN referenced below must be configured to  
      '       use Microsoft Windows NT Authentication Mode to  
      '       authorize user access to the Microsoft SQL Server. 
      .Connect = "ODBC;DATABASE=pubs;DSN=Publishers" 
      .SQL = "SELECT title, title_id FROM titles " & _ 
         "ORDER BY ytd_sales DESC" 
      Set rstTopSeller = .OpenRecordset() 
      rstTopSeller.MoveFirst 
   End With 
 
   ' Create a temporary QueryDef to retrieve data from 
   ' a Microsoft SQL Server database based on the results from 
   ' the first query. 
   Set qdfBonusEarners = dbsCurrent.CreateQueryDef("") 
   With qdfBonusEarners 
      ' Note: The DSN referenced below must be configured to  
      '       use Microsoft Windows NT Authentication Mode to  
      '       authorize user access to the Microsoft SQL Server. 
      .Connect = "ODBC;DATABASE=pubs;DSN=Publishers" 
      .SQL = "SELECT * FROM titleauthor " & _ 
         "WHERE title_id = '" & _ 
         rstTopSeller!title_id & "'" 
      Set rstBonusRecipients = .OpenRecordset() 
   End With 
 
   ' Build the output string. 
   With rstBonusRecipients 
      Do While Not .EOF 
         strAuthorList = strAuthorList & "  " & _ 
            !au_id & ":  $" & (10 * !royaltyper) & vbCr 
         .MoveNext 
      Loop 
   End With 
 
   ' Display results. 
   MsgBox "Please send a check to the following " & _ 
      "authors in the amounts shown:" & vbCr & _ 
      strAuthorList & "for outstanding sales of " & _ 
      rstTopSeller!Title & "." 
 
   rstTopSeller.Close 
   dbsCurrent.Close 
 
End Sub 

O exemplo a seguir mostra como criar uma consulta parâmetro. Uma consulta chamada myQuery é criada com dois parâmetros, chamados Param1 e Param2. Para fazer isso, a propriedade SQL da consulta está definida como uma declaração de linguagem SQL que define os parâmetros.

Código de exemplo fornecido por: a Referência do programador do Microsoft Access 2010.

    Sub CreateQueryWithParameters()
    
        Dim dbs As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim strSQL As String
    
        Set dbs = CurrentDb
        Set qdf = dbs.CreateQueryDef("myQuery")
        Application.RefreshDatabaseWindow
    
        strSQL = "PARAMETERS Param1 TEXT, Param2 INT; "
        strSQL = strSQL & "SELECT * FROM [Table1] "
        strSQL = strSQL & "WHERE [Field1] = [Param1] AND [Field2] = [Param2];"
        qdf.SQL = strSQL
    
        qdf.Close
        Set qdf = Nothing
        Set dbs = Nothing
    
    End Sub