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