SQL запрос в коде VBA

Если я хочу кодировать следующее в VBA, как мне это сделать

QUERY1:
SELECT field1, Min(field4) AS MinField4, Max(field5) AS MaxField5
FROM Table1
GROUP BY field1;


SELECT Query1.field1, Table1.field2, Table1.field3, Query1.MinField4,
       Query1.MaxField5
FROM   Query1 INNER JOIN Table1 ON (Query1.field1 = Table1.field1) AND
       (Query1.MinField4 = Table1.field4) AND
       (Query1.MaxField5 = Table1.field5);

Я знаю, что для выполнения SQL я храню его как строку и пишу SQL запуска. но как мне написать код для сохранения query1 как постоянного объекта, на который можно ссылаться в других операторах SQL?

13.10.2009 14:00:46
Поскольку VBA - это не просто Access (и потому что решение, возможно, не будет переносимым на другие виды использования VBA), это должно быть отражено в вопросе. Это важное ограничение, а не просто расширение категории.
Michael Paulukonis 13.10.2009 16:18:54
3 ОТВЕТА

Я полагаю, что ваш вопрос «Как мне создать новый запрос в Microsoft Access с помощью кода?»

Есть два решения:

  1. Microsoft Access примет заявление DDL CREATE VIEW. Таким образом, вы можете создать этот оператор в коде и затем выполнить его для базы данных через OLE DB, например, ADO в коде VBA.
  2. Объект базы данных в MS Access содержит свойство коллекций, которое называется, QueryDefsи вы можете получить к нему доступ для управления (и создания) запросов, хранящихся в базе данных.
1
15.10.2009 13:23:29
Я не вижу, где автор хочет использовать Access; VBA также используется в качестве языка сценариев для сторонних приложений, таких как FormWare или InputAccel.
Michael Paulukonis 13.10.2009 14:19:53
@OtherMicheal есть тег доступа.
Johnno Nolan 13.10.2009 14:29:24
Гм. , , Видя, как я нашел вопрос, нажав на интересующий тег Access, и увидев, как пользователь пометил свой вопрос «Доступ», и увидев, как вопрос ссылается на метод RunSQL объекта DoCmd, я подумал ( и все еще думаю) разумно предположить, что он или она использует Access.
Larry Lustig 13.10.2009 14:33:07
Хмм. так что есть - полностью пропустил это, так как я сосредоточился на названии и вопросе.
Michael Paulukonis 13.10.2009 16:16:30
@Larry Lustig: DoCmd.RunSQL не использует ANSI-89 Query Mode? Хотя «CREATE VIEW» DDL поддерживался только в режиме запросов ANSI-92.
onedaywhen 14.10.2009 10:41:01

Вы можете просто создать запрос и вставить этот SQL-запрос в представление SQL (доступно в окне конструктора запросов).

0
13.10.2009 14:14:03

Вот некоторый код, который заполнит набор данных вашими результатами

Dim cnn As ADODB.Connection
Dim recordset As ADODB.Recordset
Dim strSQL As String

Set cnn = CurrentProject.Connection
strSQL = "SELECT blah ..."
recordset.Open strSQL, cnn, adOpenKeyset, adLockOptimistic, adCmdText
'do what you want now.

о да, это было какое-то время, но вы, вероятно, тоже хотите убраться

Set recordset = Nothing
'etc..
1
13.10.2009 14:24:10
В Access / VBA нет необходимости в очистке после ADO (хотя, безусловно, полезно вести домашнюю работу, чтобы хотя бы закрыть ваш набор записей). Только у DAO были проблемы с подсчетом ссылок, и из того, что я читал, мне кажется, что в наши дни они значительно уменьшились по сравнению с временными рамками A97.
David-W-Fenton 14.10.2009 02:02:59
@ Дэвид У. Фентон: Может быть хорошей идеей будет вызвать метод Закрытия Соединения при первой же возможности, когда это будет сделано, но трудно действительно обобщить. Также обратите внимание, что иногда вам нужно установить для каталога ADO значение Nothing, чтобы закрыть соединение и освободить от пула соединений и т. Д.
onedaywhen 14.10.2009 10:37:38