Для конфигураций s3 bucket, ec2 server, cloudfront, route 53 вы можете создать один единственный шаблон облачной информации.
Для лямбда-функций создайте отдельный шаблон облачной информации.
Аналогично для конфигурации кода развертывания.
Можно связать записи с Определяемой пользователем функцией (UDF).
Код ниже может быть вставлен, 'как' в стандартный модуль. SQL для Вас пример был бы:
SELECT tbl.A, Concatenate("SELECT B FROM tbl
WHERE A = " & [A]) AS ConcA
FROM tbl
GROUP BY tbl.A
Этот код DHookom, MVP Доступа, и взят из http://www.tek-tips.com/faqs.cfm?fid=4233
Function Concatenate(pstrSQL As String, _
Optional pstrDelim As String = ", ") _
As String
'example
'tblFamily with FamID as numeric primary key
'tblFamMem with FamID, FirstName, DOB,...
'return a comma separated list of FirstNames
'for a FamID
' John, Mary, Susan
'in a Query
'(This SQL statement assumes FamID is numeric)
'===================================
'SELECT FamID,
'Concatenate("SELECT FirstName FROM tblFamMem
' WHERE FamID =" & [FamID]) as FirstNames
'FROM tblFamily
'===================================
'
'If the FamID is a string then the SQL would be
'===================================
'SELECT FamID,
'Concatenate("SELECT FirstName FROM tblFamMem
' WHERE FamID =""" & [FamID] & """") as FirstNames
'FROM tblFamily
'===================================
'======For DAO uncomment next 4 lines=======
'====== comment out ADO below =======
'Dim db As DAO.Database
'Dim rs As DAO.Recordset
'Set db = CurrentDb
'Set rs = db.OpenRecordset(pstrSQL)
'======For ADO uncomment next two lines=====
'====== comment out DAO above ======
Dim rs As New ADODB.Recordset
rs.Open pstrSQL, CurrentProject.Connection, _
adOpenKeyset, adLockOptimistic
Dim strConcat As String 'build return string
With rs
If Not .EOF Then
.MoveFirst
Do While Not .EOF
strConcat = strConcat & _
.Fields(0) & pstrDelim
.MoveNext
Loop
End If
.Close
End With
Set rs = Nothing
'====== uncomment next line for DAO ========
'Set db = Nothing
If Len(strConcat) > 0 Then
strConcat = Left(strConcat, _
Len(strConcat) - Len(pstrDelim))
End If
Concatenate = strConcat
End Function
Нет способа, которым я знаю о выполнить хранимые процедуры в базе данных Access. Однако Доступ может выполнить хранимые процедуры, если он используется против бэкенда SQL. Если Вы не можете разделить UI к Доступу и данные к SQL, то Ваш лучший выбор будет состоять в том, чтобы, вероятно, кодировать модуль VBA, чтобы дать Вам вывод, в котором Вы нуждаетесь.
Я полагаю, что можно создать функции VBA и использовать их в запросах доступа. Это могло бы помочь Вам.
Для выполнения задачи, необходимо будет использовать код. Одно решение, с помощью большего количества понятных имен, следующие:
Основная таблица с двумя применимыми столбцами:
Имя таблицы: виджеты
Поле 1: идентификатор (долго)
Поле 2: цвет (текст 32)
Добавьте таблицу с двумя столбцами:
Имя таблицы: ColorListByWidget
Поле 1: идентификатор (долго)
Поле 2: ColorList (текст 255)
Добавьте следующий код к модулю и звоните по мере необходимости для обновления таблицы ColorListByWidget:
Public Sub GenerateColorList()
Dim cn As New ADODB.Connection
Dim Widgets As New ADODB.Recordset
Dim ColorListByWidget As New ADODB.Recordset
Dim ColorList As String
Set cn = CurrentProject.Connection
cn.Execute "DELETE * FROM ColorListByWidget"
cn.Execute "INSERT INTO ColorListByWidget (ID) SELECT ID FROM Widgets GROUP BY ID"
With ColorListByWidget
.Open "ColorListByWidget", cn, adOpenForwardOnly, adLockOptimistic, adCmdTable
If Not (.BOF And .EOF) Then
.MoveFirst
Do Until .EOF
Widgets.Open "SELECT Color FROM Widgets WHERE ID = " & .Fields("ID"), cn
If Not (.BOF And .EOF) Then
Widgets.MoveFirst
ColorList = ""
Do Until Widgets.EOF
ColorList = ColorList & Widgets.Fields("Color").Value & ", "
Widgets.MoveNext
Loop
End If
.Fields("ColorList") = Left$(ColorList, Len(ColorList) - 2)
.MoveNext
Widgets.Close
Loop
End If
End With
End Sub
Таблица ColorListByWidget теперь содержит Вашу желаемую информацию. Будьте осторожны, что список (раскрашивает этот пример) не превышает 255 символов.
Никакие хранимые процедуры, никакие временные таблицы.
Если бы необходимо было возвратить запрос как recordset, то Вы могли бы использовать разъединенный recordset.
Возможно, вместо того, чтобы спросить, имеет ли Струя хранимые процедуры, необходимо объяснить, что Вы хотите выполнить, и затем мы можем объяснить, как сделать это со Струей (не ясно, используете ли Вы Доступ для своего приложения или просто используете Струю MDB в качестве Вашего хранилища данных).
Можно использовать GetString в VBA, который возвратит recordset, разделенный любым значением, которое Вы любите (например, запятая, тире, ячейки таблицы и т.д.), хотя я должен признать, что только использовал его в VBScript, не Visual Basic. W3Schools имеет хорошее учебное руководство, которое, надо надеяться, предоставит себя Вашим потребностям.
Ну, можно использовать объект Recordset циклично выполниться через запрос в VBA, связывая значения полей на основе любых критериев, в которых Вы нуждаетесь.
Если Вы захотите возвратить результаты как строки, то Вы будете в порядке. Если Вы хотите возвратить их как запрос, который будет более сложным. Вам, возможно, придется составить временную таблицу и сохранить результаты там, таким образом, можно возвратить их как таблицу или запрос.
Можно записать хранимую процедуру как текст и отправить его против базы данных с:
Dim sp as string
sp = "your stored procedure here" (you can load it from a text file or a memo field?)
Access.CurrentProject.AccessConnection.Execute sp
Это предполагает использование объектов ADODB (Библиотека объектов данных ActiveX является coorectly, на который ссылаются в приложении).
Я уверен, что существует что-то похожее с ДАО...
@Remou на DHookom's Связывают функцию: ни стандарт SQL, ни Струя не имеют a CONCATENATE()
функция множества. Проще говоря, это вызвано тем, что это - нарушение 1 нФ. Я предпочел бы делать это на стороне приложения, а не попытке вынудить SQL сделать что-то, что это не было разработано, чтобы сделать. Возможно, многозначные типы ACE (Access2007) являются лучшим соответствием: все еще NFNF, но по крайней мере существует поддержка уровня механизма. Помните, вопрос касается хранившего объекта: как был бы пользовательский запрос нескалярный столбец с помощью SQL...?
@David W. Fenton на том, имеет ли Струя хранимые процедуры: не сделал Вас, и я обсуждаю это в группах новостей несколько лет назад. Начиная с версии 4.0 Струя/ACE поддерживала следующий синтаксис в Режиме Запроса ANSI-92:
CREATE PROCEDURE procedure (param1 datatype[, param2 datatype][, ...]) AS sqlstatement;
EXECUTE procedure [param1[, param2[, ...]];
Столь Струйный создает и выполняет что-то, что это знает (в одном режиме, по крайней мере) как 'процедура', которая 'хранится' в файле MDB. Однако Струя/ACE SQL чиста и проста: это не имеет никакого синтаксиса управления потока и a PROCEDURE
может только содержать один SQL-оператор, таким образом, любой процессуальный кодекс вне рассмотрения. Поэтому ответ на то, имеет ли Струя хранимые процедуры, субъективен.