Поделиться через


Свойство QueryDef.Prepare (DAO)

Область применения: Access 2013, Office 2013

Синтаксис

expression . Подготовить

выражение: переменная, представляющая объект QueryDef.

Примечания

С помощью свойства Prepare сервер может создать временную хранимую процедуру из запроса, а затем выполнить ее, или просто выполнить запрос напрямую. По умолчанию для свойства Prepare задано значение dbQPrepare. Однако для этого свойства можно задать значение dbQUnprepare , чтобы запретить подготовку запроса. В этом случае запрос выполняется с помощью API SQLExecDirect .

Создание хранимой процедуры может замедлить начальную операцию, но повышает производительность всех последующих ссылок на запрос. Однако некоторые запросы не могут выполняться в виде хранимых процедур. В таких случаях необходимо задать для свойства Prepare значение dbQUnprepare.

Если параметр Prepare имеет значение dbQPrepare, его можно переопределить при выполнении запроса, задав аргументу параметров метода Executeзначение dbExecDirect.

Примечание.

API ODBC SQLPrepare вызывается сразу после установки свойства DAO SQL . Поэтому, если вы хотите повысить производительность с помощью параметра dbQUnprepare , необходимо задать свойство Prepare перед заданием свойства SQL .

Пример

В этом примере свойство Prepare указывает, что запрос должен выполняться напрямую, а не сначала создавать временную хранимую процедуру на сервере.

Sub PrepareX() 
 
 Dim wrkODBC As Workspace 
 Dim conPubs As Connection 
 Dim qdfTemp As QueryDef 
 Dim rstTemp As Recordset 
 
 ' Create ODBCDirect Workspace object and open Connection 
 ' object. 
 Set wrkODBC = CreateWorkspace("", _ 
 "admin", "", dbUseODBC) 
 
 ' Note: The DSN referenced below must be configured to 
 ' use Microsoft Windows NT Authentication Mode to 
 ' authorize user access to the Microsoft SQL Server. 
 Set conPubs = wrkODBC.OpenConnection("Publishers", , , _ 
 "ODBC;DATABASE=pubs;DSN=Publishers") 
 
 Set qdfTemp = conPubs.CreateQueryDef("") 
 
 With qdfTemp 
 ' Because you will only run this query once, specify 
 ' the ODBC SQLExecDirect API function. If you do 
 ' not set this property before you set the SQL 
 ' property, the ODBC SQLPrepare API function will 
 ' be called anyway which will nullify any 
 ' performance gain. 
 .Prepare = dbQUnprepare 
 .SQL = "UPDATE roysched " & _ 
 "SET royalty = royalty * 2 " & _ 
 "WHERE title_id LIKE 'BU____' OR " & _ 
 "title_id LIKE 'PC____'" 
 .Execute 
 End With 
 
 Debug.Print "Query results:" 
 
 ' Open recordset containing modified records. 
 Set rstTemp = conPubs.OpenRecordset( _ 
 "SELECT * FROM roysched " & _ 
 "WHERE title_id LIKE 'BU____' OR " & _ 
 "title_id LIKE 'PC____'") 
 
 ' Enumerate recordset. 
 With rstTemp 
 Do While Not .EOF 
 Debug.Print , !title_id, !lorange, _ 
 !hirange, !royalty 
 .MoveNext 
 Loop 
 .Close 
 End With 
 
 conPubs.Close 
 wrkODBC.Close